質問

GLib で簡単に使用できる MD5/SHA1/etc ルーチンを知っている人はいますか (つまり、GIOChannel などを指定できますか?

役に立ちましたか?

解決

持っていない限り、 とても 当然のことながら、glib の組み込み 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 );
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top