Routine MD5 compatibili con GLib?
Domanda
Qualcuno conosce una routine MD5 / SHA1 / etc che può essere facilmente utilizzata con GLib (ovvero puoi dargli un GIOChannel, ecc.)
Soluzione
A meno che tu non abbia una buona ragione molto , usa le implementazioni MD5, SHA1 e SHA256 incorporate di glib con GChecksum
. Non ha una funzione integrata per costruire un checksum da un flusso IO, ma puoi scriverne uno semplice su 10 righe e dovresti scriverne uno tu stesso comunque.
Altri suggerimenti
Normalmente devi fare cose per la colla delle biblioteche da te ...
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 );
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow