C Programer  - 讨论区

标题:GLib Data Checksums模块编程示例

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哲思注册吗?现在 注册 !

    Zeuux © 2024

    京ICP备05028076号