누구나 GLib에서 쉽게 사용할 수있는 MD5/SHA1/etc 루틴을 알고 있습니까? 즉, GIOC 채널 등을 제공 할 수 있습니까?GLib와 친숙한 MD5 루틴은 무엇입니까?
6
A
답변
6
을 사용 입심에 내장 된 MD5, SHA1, 및 GChecksum
와 SHA256 구현. IO 스트림에서 체크섬을 구성하는 내장 함수가 없지만 간단한 10 행을 쓸 수 있으며 어쨌든 복잡한 코드를 작성해야합니다.
2
당신은 일반적으로 당신이 매우 좋은 이유가없는 ... 라이브러리 접착제 물건을 직접 할
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);
}