C: MD5 给出垃圾作为结果

标签 c macos hash md5

我正在使用 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/

相关文章:

使用哈希和哈希引用的 Perl 速度比较

hash - 在 Fortran 中计算真实数组的校验和

c - 为什么这个基本的 C 示例不起作用?

c - 超越比较 : compare whole function calls or xml blocks

git - 有人在 M1 CPU Mac 上成功运行 git-svn 吗?

macos - VirtualHere 如何在 macOS 上创建虚拟 USB 设备?

objective-c - 如何解决 "Instance method [...] not found"错误?

c++ - Objective C C++ if(cin >> variable) 等效

c++ - LD_PRELOAD 导致 linux 命令的段错误

python - Python3 hashlib 和 Google BigQuery 的 MD5 哈希输出的差异