1、什么是哈希算法?(Hash函数)
哈希算法的定义和原理:
将任意长度的二进制值串映射为固定长度的二进制值串,这个映射的规则,就是哈希算法。而通过原始数据映射之后得到的二进制值串就是哈希值。
设计一个优秀的哈希算法,需要满足下面几点要求:
a.从哈希值不能反向推导出原始数据(所以哈希算法也叫单向哈希算法)
b.对输入的数据比较敏感,原始数据即使修改一个字节,最后得到的哈希值也大不相同
c.散列冲突的概率要小,对于不同的原始数据,哈希值相同的概率非常小
d.哈希算法的执行效率要尽量高,针对较长的文本,也能快速地计算出哈希值
2、哈希算法的应用
哈希算法的应用非常多,选择常见的七个进行说明。分别是:
安全加密、唯一标识、数据校验、散列函数、负载均衡、数据分片、分布式存储。
3.哈希算法的版本
Hash函数理论上是不可逆的,但并非就是安全的。列如有名的 Hash 函数 MD5,2004年8月中国密码学家王小云教授首次公布了提出一种寻找 MD5 碰撞的新方法。目前利用该方法用普通计算机几分钟内即可找到 MD5 的碰撞。因此,2008年以后 MD5 逐渐被更为安全的 SHA-256 替代
而在国内,则使用国密 SM3 代替。SM3 是在 SHA-256 的基础上进行改进,中国国家密码管理局 2010 年公布的中国商用密码算法标准
算法 | 输出/位 | 输入/位 | 轮数 | 是否找到冲突 |
---|---|---|---|---|
MD5 | 128 | 512 | 64 | 是 |
SHA-1 | 160 | 512 | 80 | 尚未找到 |
SHA-2 SHA-224 | 224 | 512 | 64 | 否 |
SHA-2 SHA-256 | 256 | 512 | 64 | 否 |
SHA-2 SHA-384 | 384 | 1024 | 80 | 否 |
SHA-2 SHA-512 | 512 | 1024 | 80 | 否 |
SM3 | 256 | 512 | 64 | 否 |