GLib友好的MD5例程?
时间:2020-03-06 14:31:13 来源:igfitidea点击:
有谁知道可以轻松与GLib一起使用的MD5 / SHA1 / etc例程(即我们可以为其提供GIOChannel等)吗?
解决方案
我们通常必须自己动手做图书馆胶水工作...
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 ); }
除非我们有充分的理由,否则请将glib的内置MD5,SHA1和SHA256实现与GChecksum
一起使用。它没有内置功能可以根据IO流构造校验和,但是我们可以每10行编写一个简单的代码,而我们仍然需要自己编写一个复杂的代码。