Question

Est-ce que quelqu'un connaît une routine MD5 / SHA1 / etc qui est facilement utilisée avec GLib (c'est-à-dire que vous pouvez lui attribuer un GIOChannel, etc.)?

Était-ce utile?

La solution

Sauf si vous avez une très bonne raison, utilisez les implémentations MD5, SHA1 et SHA256 intégrées de glib avec GChecksum . Il n’a pas de fonction intégrée pour construire une somme de contrôle à partir d’un flux d’IO, mais vous pouvez en écrire une simple sur 10 lignes, et vous auriez quand même besoin d’écrire une complexe.

Autres conseils

Vous devez normalement faire vous-même des trucs avec de la colle de bibliothèque ...

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 );
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top