2008-09-22 28 views

Trả lời

6

Trừ khi bạn có một lý do rất tốt, sử dụng lém lỉnh tích hợp trong MD5, SHA1, SHA256 và triển khai với GChecksum. Nó không có một hàm dựng sẵn để xây dựng một checksum từ một luồng IO, nhưng bạn có thể viết một cái đơn giản trong 10 dòng, và bạn cũng cần viết một cái phức tạp.

2

Bạn thường phải làm thư viện keo thứ cho mình ...

void get_channel_md5(GIOChannel* channel, unsigned char output[16]) 
{ 
    md5_context ctx; 

    gint64 fileSize = <get file size somehow?>; 
    gint64 filePos = 0ll; 

    gsize bufferSize = g_io_channel_get_buffer_size(channel); 
    void* buffer = malloc(bufferSize); 

    md5_starts(&ctx); 

    // hash buffer at a time: 
    while (filePos < fileSize) 
    { 
     gint64 size = fileSize - filePos; 
     if (size > bufferSize) 
      size = bufferSize; 

     g_io_channel_read(channel, buffer); 
     md5_update(&ctx, buffer, (int)size); 

     filePos += bufferSize; 
    } 

    free(buffer); 

    md5_finish(&ctx, output); 
} 
Các vấn đề liên quan