哈希函数¶
哈希函数(Hash Function)把消息或数据压缩成摘要,使得数据量变小。其一般模型如下
显然对于任何一个hash值,理论上存在若干个消息与之对应,即碰撞。
哈希函数的基本需求如下
需求 | 描述 |
---|---|
输入长度可变 | hash函数可以应用于任意长度的数据 |
输出长度固定 | hash函数的输出长度固定 |
效率 | 对于任意消息 x,计算 H(x) 很容易 |
单向性 | 对于任意哈希值h,想要找到满足H(x)=h 的x在计算上不可行。 |
抗弱碰撞性 | 对于任意消息x,找到满足另一消息y,满足H(x)=H(y) ,在计算上不可行。 |
抗强碰撞性 | 找到任意一对满足 H(x)=H(y) 的消息x和y在计算上不可行。 |
伪随机性 | 哈希函数的输出满足伪随机性测试标准。 |
散列值的目的如下
- 确保消息的完整性,即确保收到的数据确实和发送时的一样(即没有修改、插入、删除或重放),防止中间人篡改。
- 冗余校验
- 单向口令文件,比如linux系统的密码
- 入侵检测和病毒检测中的特征码检测
目前的Hash函数主要有MD5,SHA1,SHA256,SHA512。目前的大多数hash函数都是迭代性的,即使用同一个hash函数,不同的参数进行多次迭代运算。
算法类型 | 输出 Hash 值长度 |
---|---|
MD5 | 128 bit / 256 bit |
SHA1 | 160 bit |
SHA256 | 256 bit |
SHA512 | 512 bit |