【问题标题】:Why does this MD5 algorithm return what seems to be a memory location and not a hash? [closed]为什么这个 MD5 算法返回的似乎是内存位置而不是哈希? [关闭]
【发布时间】:2018-03-21 19:19:17
【问题描述】:

我正试图围绕 Brad Conte MD5 算法展开思考。

你可以在这里得到它:https://github.com/B-Con/crypto-algorithms (md5.c, md5.h, md5_test.c)

这里也是一个生成哈希的例子:http://bradconte.com/files/projects/code/md5_example.c

这个例子说它应该打印散列:

d41d8cd98f00b204e9800998ecf8427e
900150983cd24fb0d6963f7d28e17f72
d174ab98d277d9f5a5611c2c9f419d9f

但对我来说它会打印:

ffffffd41dffffff8cffffffd9ffffff8f00ffffffb204ffffffe9ffffff8009ffffff98ffffffe    cfffffff8427e
ffffff900150ffffff983cffffffd24fffffffb0ffffffd6ffffff963f7d28ffffffe17f72
ffffffd174ffffffabffffff98ffffffd277ffffffd9fffffff5ffffffa5611c2cffffff9f41ffffff9dffffff9f

这些对我来说似乎是内存地址而不是哈希?

我是 C 和 MD5 的新手,所以我可能做错了什么 - 但我觉得奇怪的是,该示例没有打印描述中所说的内容。

有人愿意检查一下吗?

【问题讨论】:

  • minimal reproducible example 代码添加到问题中。
  • 看起来像符号扩展为 32 位的 16 位值 - 可能在某处使用 int16_t 而不是 uint16_t

标签: c hash md5


【解决方案1】:

printfchar 转换为int。结果取决于 char 是否已签名(因此在您的情况下会进行符号扩展)。

您确定要使用会出现此类错误的加密包吗?

【讨论】:

  • 它用于学校作业,我被告知要使用它 - 没有进一步的解释。
  • 有什么办法可以解决吗?
  • 您可以先将值转换为无符号,也许是(int)((unsigned char)hash[idx]),然后显示出来。
  • 谢谢,现在它是一个哈希。但是每次我运行它时,它都会为同一个文件生成不同的哈希值。同一个文件不应该有相同的总和吗?
  • 是的,一般的想法是通过重新计算哈希来验证文件,并查看它没有改变。也许您应该问一个新问题,在哪里显示带有示例文件的代码以及获得的结果?
猜你喜欢
  • 1970-01-01
  • 2019-12-29
  • 2014-08-06
  • 1970-01-01
  • 2019-08-05
  • 1970-01-01
  • 2020-09-21
相关资源
最近更新 更多