Les routines MD5 compatibles avec GLib?
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.)?
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