散列算法又称散列函数、哈希函数(Hash Function),将任意长度的输入通过算法转换成固定长度的输出,输出值成为散列值,通常为字母和数字组合。
特点
- 确定性:如果两个散列值是不同的,那么这两个散列值的原始输入也是不同的。
- 散列碰撞(collision):输入和输出不是唯一对应关系,如果两个散列值相同,两个输入值可能是相同的,也可能不相同。
- 不可逆性:一个散列值对应无数个明文,理论上不知道是哪个。
- 混淆特性:输入一些数据计算出散列值,然后改变输入值中部分,一个具有强混淆特性的散列函数针对已改变的输入值会计算产生出一个完全不同的散列值。
常见散列算法
算法名称 | 输出位数(bits) | 内部大小 | 区块大小 | 长度大小 | 字符尺寸 | 碰撞情形 |
---|---|---|---|---|---|---|
HAVAL | 256/224/192/160/128 | 256 | 1024 | 64 | 32 | 是 |
MD2 | 128 | 384 | 128 | No | 8 | 大多数 |
MD4 | 128 | 128 | 512 | 64 | 32 | 是 |
MD5 | 128 | 128 | 512 | 64 | 32 | 是 |
SHA-0 | 160 | 160 | 512 | 64 | 32 | 是 |
SHA-1 | 160 | 160 | 512 | 64 | 32 | 有缺陷 |
SHA-256/224 | 256/224 | 256 | 512 | 64 | 32 | 否 |
SHA-512/384 | 512/384 | 512 | 1024 | 128 | 64 | 否 |