哈希
哈希(Hash)也称为散列,就是把任意长度的输入,通过散列算法,变换成固定长度的输出,这个输出值就是散列值。
哈希的特点
哈希算法最重要的特点就是:
- 相同的输入一定得到相同的输出;
-
哈希碰撞
哈希碰撞是指,两个不同的输入得到了相同的输出:
"AaAaAa".hashCode(); // 0x7460e8c0"BBAaBB".hashCode(); // 0x7460e8c0
碰撞不可怕,我们担心的不是碰撞,而是碰撞的概率,因为碰撞概率的高低关系到哈希算法的安全性。一个安全的哈希算法必须满足:
碰撞概率低;
- 不能猜测输出(不能找出规律反推)。
常用的哈希算法有:
| 算法 | 输出长度(位) | 输出长度(字节) | | —- | —- | —- | | MD5 | 128 bits | 16 bytes | | SHA-1 | 160 bits | 20 bytes | | RipeMD-160 | 160 bits | 20 bytes | | SHA-256 | 256 bits | 32 bytes | | SHA-512 | 512 bits | 64 bytes |
根据碰撞概率,哈希算法的输出长度越长,就越难产生碰撞,也就越安全。
哈希算法的用途
- 判断是否篡改
因为相同的输入永远会得到相同的输出,因此,如果输入被修改了,得到的输出就会不同。
- 密码加密
当数据库泄漏之后,也看不到用户的密码。
