基本概念
- 单向散列函数,又称哈希函数/消息摘要函数/杂凑函数。
- 输出的散列值也被称为消息摘要(Message Diges,MD)/指纹(Fingerprint)
- 输入的消息又称原像(pre-image)
单向散列函数的特点
- 计算速度快,能快速计算出散列值
- 散列值的长度和消息的长度无关,根据任意长度的消息,计算出固定长度的散列值
- 消息不同,散列值也不同
- 具备单向性,无法通过散列值反推出消息的性质
补充一个概念:
抗碰撞性
无法随机找到两条不同的消息,使得他们的散列值相同
- 弱抗碰撞性:给定某个散列值,找到具有相同散列值的另一条消息非常困难
- 强抗碰撞性:找到散列值相同的两条的不同消息非常困难
单项散列函数必须同时具备这两者特征,常用来表示这个单项散列函数目前是否安全。
常见的几种单向散列函数
-
MD4、MD5
产生128bit的散列值,MD就是Message Digest的缩写,目前强抗碰撞性已被攻破,已经不安全。
Mac终端上默认可以使用md5命令。 -
SHA-1
产生160bit的散列值,目前强抗碰撞性已被攻破,已经不安全。 -
SHA-2
SHA-256、SHA-384、SHA-512,散列值长度分别是256bit、384bit、512bit。目前尚未被攻破。 -
SHA-3
区别于SHA-1,SHA-2的全新标准全新标准。 -
RIPEMD-160
RIPEMD-160是欧盟所设计的RIPEMD的修订版,散列值为160比特。RIPEMD已经被攻破,RIPEMD-160还未被攻破。
用途
-
用来解决判断发送的数据是否被篡改。无法解决伪装性!(是否是某人发的)。
Snip20200918_34.png
-
口令加密:最简单的场景就是服务器存储口令的散列值(口令可以理解为日常用的密码),只有用户输入的时候是密文,后面全部以散列值处理存储。
Snip20200918_35.png
-
数字签名
网友评论