【问题标题】:C: MD5 gives garbage as resultC: MD5 给出垃圾作为结果
【发布时间】:2012-03-10 16:18:53
【问题描述】:

我正在使用Peter Deutsch's implementation of MD5 来实现简单的密码检查。我是这样用的:

md5_state_t md;
char *in = "Hello World";
char *out[16];

md5_init(&md);
md5_append(&md, in, strlen(in));
md5_finish(&md, out);

printf("In:  %s\n", in);
printf("Out: %s\n", out);

问题是,我得到这样的结果:

In:  Hello World
Out: ?
??d?uA????.??

有人知道这里出了什么问题吗?

【问题讨论】:

    标签: c macos hash md5


    【解决方案1】:

    MD5 散列是一个 16 字节的二进制 blob。您不能将其打印为字符串。打印它,例如以十六进制表示:

    md5_state_t md;
    char *in = "Hello World";
    char out[16];
    int i;
    
    md5_init(&md);
    md5_append(&md, in, strlen(in));
    md5_finish(&md, out);
    
    printf("In:  %s\n", in);
    printf("Out: ");
    for(i = 0; i < 16: i++) 
       printf("%02X", out[i]);
    puts("");
    

    请注意,以上将out 也更改为字符,它不能是字符*

    【讨论】:

    • 工作,太棒了。谢谢。我知道,它是一个二进制文件,由函数返回。但我希望数据存储在 ascii 文本中,就像 PHP md5() 一样。我玩了一下,但发现返回的 blob 中的很多位只是 ff 的 - 所以根据 ascii 没有可打印的符号。是否有任何一般偏移量,例如PHP md5() 使用?
    • 好的,自己找的。只需制作 [] 无符号即可。 m)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-06
    • 2021-11-23
    相关资源
    最近更新 更多