GL5友好的MD5例程?

时间:2008-09-22 01:48:28

标签: c linux glib

有没有人知道一个易于与GLib一起使用的MD5 / SHA1 / etc例程(即你可以给它一个GIOChannel等)?

2 个答案:

答案 0 :(得分:6)

除非你有非常的理由,否则请使用glib内置的MD5,SHA1和SHA256实现GChecksum。它没有内置函数来从IO流构造校验和,但是您可以用10行编写一个简单的函数,而且无论如何您都需要自己编写一个复杂的函数。

答案 1 :(得分: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 );
}