我正在使用 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????.??
有人知道这里出了什么问题吗?
最佳答案
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
更改为一个 char,它不能是一个 char*
关于C: MD5 给出垃圾作为结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9359201/