散列加密:MD5、SHA-1、SHA-2、SHA-3、SHA256、SHA512 作者:马育民 • 2024-04-04 10:24 • 阅读:10026 本文摘自:https://zhuanlan.zhihu.com/p/415139457 # 介绍 单向散列函数(one-way hash function)是指对不同的输入值,通过单向散列函数进行计算,得到固定长度的输出值。这个输入值称为消息(message),输出值称为散列值(hash value)。 [](/upload/0/0/1IX7Roj6FAwT.png) 单向散列函数也被称为消息摘要函数(message digest function)、哈希函数或者杂凑函数。输入的消息也称为原像(pre-image)。输出的散列值也称为消息摘要(message digest)或者指纹(fingerprint),相当于该消息的身份证。 单向散列函数有多种实现算法,常见的有:MD5、SHA-1、SHA-2和 SHA-3。 # 特性 通过上面的定义,我们对单向散列函数的了解还是模糊的。下面介绍单向散列函数的特性,加深一下印象。 ### 散列值长度固定 无论消息的长度有多少,使用同一算法计算出的散列值长度总是固定的。比如 MD5 算法,无论输入多少,产生的散列值长度总是 128 比特(16字节)。 然而比特是计算机能够识别的单位,而我们人类更习惯于使用十六进制字符串来表示(一个字节占用两位十六进制字符)。 [](/upload/0/0/1IX7RojipgYX.png) ### 消息不同其散列值也不同 使用相同的消息,产生的散列值一定相同。 使用不同的消息,产生的散列值也不相同。哪怕只有一个比特的差别,得到的散列值也会有很大区别。 这一特性也叫做抗碰撞性,对于抗碰撞性弱的算法,我们不应该使用。 [](/upload/0/0/1IX7RoklJZZb.png) ### 具备单向性 只能通过消息计算出散列值,无法通过散列值反算出消息。 [](/upload/0/0/1IX7RolHo60e.png) ### 计算速度快 计算散列值的速度快。尽管消息越长,计算散列值的时间也越长,但也会在短时间内完成。 # 常见算法 MD5 与 SHA-1 算法已被攻破,不应该被用于新的用途 > SHA-1 比 MD5 更安全 SHA-2 与 SHA-3 还是安全的,可以使用。 SHA-2包括:SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256。 SHA-3包括:SHA3-224、SHA3-256、SHA3-384、SHA3-512。 |算法|bit|byte|char| |---|---|---| |MD5|128|16|32| |SHA-1|40|20|40| |SHA-256|256|32|64| |SHA-384|384|48|96| |SHA-512|512|64|128| # 应用场景 单向散列函数并不能确保信息的机密性,它是一种保证信息完整性的密码技术。下面来看它的应用场景。 ### 用户密码保护 用户在设置密码时,不记录密码本身,只记录密码的散列值,只有用户自己知道密码的明文。校验密码时,只要输入的密码正确,得到的散列值一定是一样的,表示校验正确。 为了防止彩虹表破解,还可以为密码进行加盐处理,只要验证密码时,使用相同的盐即可完成校验。 [](/upload/0/0/1IX7RomtNnZm.png) 使用散列值存储密码的好处是:即使数据库被盗,也无法将密文反推出明文是什么,使密码保存更安全。 ### 接口验签 为了保证接口的安全,可以采用签名的方式发送。 发送者与接收者要有一个共享秘钥。当发送者向接收者发送请求时,参数中附加上签名(签名由共享秘钥 + 业务参数,进行单向散列函数加密生成)。接收者收到后,使用相同的方式生成签名,再与收到的签名进行比对,如果一致,验签成功。 这样即可以验证业务参数是否被篡改,又能验明发送者的身份。 [](/upload/0/0/1IX7RonevBCu.png) ### 文件完整性校验 文件被挂载到网站时,同时也附上其散列值和算法,比如 Tomcat 官网。 [](/upload/0/0/1IX7Roo9f4fx.png) 用户下载后,计算其散列值,对比结果是否相同,从而校验文件的完整性。 ### 云盘秒传 当我们将自己喜欢的视频放到网盘上时,发现只用了几秒的时间就上传成功了,而这个文件有几个G大小,是怎么做到的呢? 其实这个“秒传”功能可以利用单向散列函数来实现。 当我们上传一个文件时,云盘客户端会先为该文件生成一个散列值。拿着这个散列值去数据库中匹配,如果匹配到,说明该文件已经在云服务器存在。只需将该散列值与用户进行关联,便可完成本次“上传”。 这样,一个文件在云服务器上只会存一份,大大节约了云服务器的空间。 [](/upload/0/0/1IX7RoofngU1.png) 原文出处:https://www.malaoshi.top/show_1IX7RopU2L36.html