Pregunta

¿Alguien sabe de una rutina MD5/SHA1/etc que se pueda usar fácilmente con GLib (es decir,¿Puedes darle un GIOChanel, etc.)?

¿Fue útil?

Solución

A menos que tengas un muy Una buena razón es utilizar las implementaciones MD5, SHA1 y SHA256 integradas de Glib con GChecksum.No tiene una función incorporada para construir una suma de verificación a partir de una secuencia IO, pero puede escribir una simple en 10 líneas y, de todos modos, necesitaría escribir una compleja usted mismo.

Otros consejos

Normalmente tienes que hacer el pegamento de la biblioteca tú mismo...

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 );
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top