2014年02月07日 星期五 09:01
GLib库的Data Checksums模块提供了MD5、SHA1、SHA256等哈希算法,并提供增量模式与单步模式两种API,使用非常方便。
代码示例如下:
#include <stdio.h>
#include <glib.h>
#include <string.h>
#include <stdlib.h>
int main(int argc,char **argv) {
if(argc != 3) {
fprintf(stderr,"usage: %s \
type(md5|sha1|sha256) \
filename\n",argv[0]);
return -1;
}
GChecksumType type;
if(strcmp("md5",argv[1]) == 0) {
type=G_CHECKSUM_MD5;
} else if (strcmp("sha1",argv[1]) == 0) {
type=G_CHECKSUM_SHA1;
} else if (strcmp("sha256",argv[1]) == 0) {
type=G_CHECKSUM_SHA256;
} else {
type=G_CHECKSUM_MD5;
}
char *filename=argv[2];
FILE *fp=fopen(filename,"r");
if(!fp) {
perror("fopen");
return -2;
}
GChecksum *sum=g_checksum_new(type);
char *buf=g_slice_alloc0(1024);
size_t n=0;
while(!feof(fp)) {
n=fread(buf,1,1024,fp);
g_checksum_update(sum,buf,n);
}
printf("%s\n",g_checksum_get_string(sum));
g_checksum_free(sum);
g_slice_free1(1024,buf);
fclose(fp);
return 0;
}
参考资料:
https://developer.gnome.org/glib/2.39/glib-Data-Checksums.html
Zeuux © 2025
京ICP备05028076号