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 donner un GIOChannel, etc.)?Les routines MD5 compatibles GLib?
6
A
Répondre
6
bibliothèque Sauf si vous avez un très bonne raison, utiliser MD5 intégré dans glib, SHA1 et mises en œuvre avec SHA256 GChecksum
. Il n'a pas de fonction intégrée pour construire une somme de contrôle à partir d'un flux d'E/S, mais vous pouvez en écrire une simple sur 10 lignes, et vous devrez en écrire une de toute façon.
2
Vous devez normalement faire des trucs de colle ... vous
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);
}