代码之家  ›  专栏  ›  技术社区  ›  Ana Betts

对油嘴滑舌友好的MD5程序?

  •  6
  • Ana Betts  · 技术社区  · 16 年前

    有人知道一个MD5/SHA1/ETC程序很容易与glib一起使用吗(例如,你可以给它一个giochannel,等等)?

    2 回复  |  直到 13 年前
        1
  •  6
  •   Community CDub    13 年前

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

        2
  •  2
  •   Simon Buchan    16 年前

    你通常要自己做图书馆的胶水…

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