2008-09-22 38 views

回答

6

除非你有一個非常原因,用巧舌如簧的內置MD5,SHA1,SHA256和與實現GChecksum。它沒有內置的函數來從IO流構造校驗和,但是你可以用10行寫一個簡單的函數,而且你需要自己編寫一個複雜的函數。

2

通常你必須自己來圖書館膠水的東西...

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); 
}