最近,我一直在寻找一个将MD5转换为纯文本格式的网站。为什么解密起来这么容易?
以这个例子
8466fa8e428bf83c4d2d9893b4bada64
7d53cbd3f0c0e2af31c3ba1eab940f22
dc647eb65e6711e155375218212b3964
27d4cf7da57f6748f79254f7be42cca3
909cea0c97058cfe2e3ea8d675cb08e1
在不到1秒的时间内解密为“我的Gmail密码为橙色”。 Picture
即使使用sha256,它也立即被解密 Picture
答案 0 :(得分:3)
由于md5不是一种加密机制,因此它是一种非常古老的单向哈希算法。您发现的是碰撞,它们极不可能是原始输入。他们产生了 a 个可能的比赛。考虑
$ echo "My Gmail Password Is Orange" | md5sum
97ec87f89796b683feae88008c302d22 -
$ echo -n "My Gmail Password Is Orange" | md5sum
52b4551c065189631be8b506eee9b62e -
这两个String
之间的唯一区别是换行符。 md5损坏确实是这样。但这不是可逆的,除非您考虑使用非常短的单词和字典。
答案 1 :(得分:3)
md5 是一种单向摘要函数,也称为哈希函数。这不是一种加密机制。
已知md5 有几个弱点,并且十年来普遍的建议是避免使用它。
在此特定站点上,您可能会看到一个彩虹表示例,用于查找冲突,甚至可能是原始输入。 Rainbow表通过预先计算大量可能的输入(例如,已知密码,多种语言的整个词典,常见单词组合等)来工作。这样的表可以有效地搜索给定的哈希,以找到产生所述哈希的输入。
请注意,在某些情况下,彩虹表可能会收到与输入结果不同的结果。在这种情况下,它也是碰撞的一个例子。
可以通过盐析来防止彩虹攻击,因为盐析会向每个输入添加随机数据,因此预先计算的彩虹表不太可能包含您的确切输入。
尽管 md5 被认为是损坏的,但在给定哈希值的情况下,您可以执行直接的“解密”-大多数攻击都尝试产生冲突而不是查找原像。
>对于任何对安全敏感的应用程序,您应该考虑使用现代的哈希函数,例如 sha256 。对于密码哈希,请考虑使用专门为密码哈希设计的哈希函数,例如 bcrypt 。