2008-09-22 11 views

Respuesta

6

A menos que tenga una buena razón muy , utilice simplista de una función de MD5, SHA1 y SHA256 con implementaciones GChecksum. No tiene una función incorporada para construir una suma de verificación a partir de una secuencia de IO, pero puede escribir una simple en 10 líneas, y de todos modos necesitará escribir una compleja.

2

normalmente tiene que hacer cosas pegamento biblioteca de ti 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); 
} 
Cuestiones relacionadas