什么是Hash函数
- 单向
原始消息可以通过Hash函数得到数字指纹,但是反推是不成立的。 - 压缩
原始消息很长,可以将大的消息压缩成小的消息。 - 定长
通过Hash函数得到的结果都是512位的比特串 - 碰撞/冲突
两个不一样的消息,通过Hash函数得到的Hash值是一样的,此时就产生了碰撞。碰撞是不可避免的,我们要做的是尽可能减少碰撞情况的发生。 - 高灵敏
类似于“四两拨千斤”,“蝴蝶效应”的现象,原始值改动一点点,Hash值会产生翻天覆地的变化。
Hash函数的用途
- 完整性检测
可以通过校验的办法来校验文件是否是原来的文件,文件是否被修改过。Hash函数加上key可以放数据篡改。 - 登录验证,校对密码
在登录网站的过程中,用户名的密码是不能直接存在数据库的,不能以明文的形式进行存储。在做Hash函数操作的时候加salt,数据库中存储密码加salt之后的Hash值和salt的值,加了一层的保障。Hash算法是很快的加密算法。加密算法的快慢排序:Hash > 对称加密 > 非对称加密。
常见的Hash算法
MD5和SHA-1已经被证明不安全,现在用的比较多的是SHA-2。
MAC和HMAC
MAC(MessageAuthCode)消息验证码。是为了检查传输的消息有无损坏和篡改。
HMAC(Hash based MAC)基于Hash的消息验证码。
TLS 1.3之前是先计算MAC在进行Encrpt,TLS 1.3之后是可以进行自定义的。