Frage

Kennt jemand eine MD5 / SHA1 / etc Routine, die leicht mit GLib verwendet wird (das heißt man kann es geben ein GIOChannel, usw.)?

War es hilfreich?

Lösung

Es sei denn, Sie haben einen sehr guten Grund verwendet glib eingebaute in MD5, SHA1, SHA256 und Implementierungen mit GChecksum . Es verfügt nicht über eine integrierte Funktion eine Prüfsumme von einem IO-Stream zu bauen, aber man kann ein einfaches in 10 Zeilen schreiben, und Sie würden eine komplexe, sich trotzdem schreiben müssen.

Andere Tipps

Sie haben in der Regel Bibliothek Kleber Sachen selbst zu tun ...

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 );
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top