【关于MD5 的安全性,预映射攻击 and 碰撞攻击 and SHA-256】

首先 MD5 它是一种哈希算法,可以将任意长度的消息转换为固定长度的哈希值,因为在转换过程中会大量地丢弃数据,所以说 MD5 是不可逆的,不要想着反推,不可能。对 MD5 攻击主要有以下两种方式:① 预映射攻击。这样太累了吧?攻击者要预先计算出大量的不同输入的哈希值,然后存到一张映射表中,如果我们知道了目标对象的哈希值,那就好办了,很简单直接在映射表中查找该哈希值,进而找到具体的输入,据说这种攻击方法的效率非常高,但是我在想,这得准备多少数据才能命中啊,像不像枚举?工作量还是很大的。② 碰撞攻击。这种方式很不道德,纯属浑水摸鱼。攻击者通过某种方式找到了两个不同的输入,但是它们的哈希值相同。这样呢攻击者就可以伪造一份与原始文档哈希值相同但内容完全不同的文档,从而破坏数据的完整性。如果要对敏感数据进行加密,MD5 就算了吧,可以使用 PBKDF2,它的流程大概这样:随机生成一个 Salt,这个随机是真的随机,然后把你的密码和这个 Salt 连接在一起,当做一个整体做一次哈希计算,这里的哈希算法用的是安全的 SHA-256,可以避免哈希碰撞。