6
有沒有人知道很容易與GLib一起使用的MD5/SHA1/etc例程(即你可以給它一個GIOChannel等)?GLib友好的MD5例程?
有沒有人知道很容易與GLib一起使用的MD5/SHA1/etc例程(即你可以給它一個GIOChannel等)?GLib友好的MD5例程?
除非你有一個非常好原因,用巧舌如簧的內置MD5,SHA1,SHA256和與實現GChecksum
。它沒有內置的函數來從IO流構造校驗和,但是你可以用10行寫一個簡單的函數,而且你需要自己編寫一個複雜的函數。
通常你必須自己來圖書館膠水的東西...
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);
}