我最近了解到 MD5 并不安全,因为它可以在很短的时间内被追踪。
如果我只给出固定的 512 位数据作为输入。 MD5 将给出 128 位哈希值(32 个十六进制值)
如果 MD5 有缺陷,那么在给定 128 位哈希值的情况下,任何人都可以建议重建 512 位输入的最佳方法吗?
(旁注:我非常想实现这个。对于速度而言,C++ 是更好的选择,而对于其内置的安全包,Java 是更好的选择吗?)
最佳答案
有 2 ** 384(大约 4x10**115)个不同的 512 位 block 散列到相同的 MD5。即使在原则上也是不可能逆转的。
但是,有可能找到那些 4x10**115 block 中的一个,它生成的 MD5 与您想要的 block 相同,那就是 为什么它被认为是不安全的。例如,如果您将一个文件连同 MD5 哈希值一起发布到网络上以验证其完整性,则黑客可能能够将其替换为具有相同哈希值的不同文件。
使用 SHA256 等更安全的哈希值,这也是不可能的。
关于java - 从哈希中查找消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29565184/