有谁知道易于与 GLib 一起使用的 MD5/SHA1/etc 例程(即您可以给它一个 GIOChannel 等)?
Paul Betts
问问题
1520 次
2 回答
6
除非您有充分的理由,否则请使用 glib 的内置 MD5、SHA1 和 SHA256 实现与GChecksum
. 它没有从 IO 流构造校验和的内置函数,但是您可以在 10 行中编写一个简单的,但无论如何您都需要自己编写一个复杂的。
于 2008-09-22T02:26:08.003 回答
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 );
}
于 2008-09-22T02:19:17.583 回答