哈希算法
什么是哈希算法
散列函数(Hash function)又称散列算法、哈希函数,是一种从任何一种数据中创建小的数字“指纹”的方法。
哈希算法有什么特点
确定性
如果两个散列值是不相同的(根据同一函数),那么这两个散列值的原始输入也是不相同的。
散列碰撞(collision)
散列函数的输入和输出不是唯一对应关系的,如果两个散列值相同,两个输入值很可能是相同的,但也可能不同。
不可逆性
一个设计优秀的加密散列函数是一个“单向”操作:对于给定的散列值,没有实用的方法可以计算出一个原始输入,也就是说很难伪造。
同时一个哈希值对应无数个明文,理论上也不知道哪个是正确对应的。
混淆特性
输入一些数据计算出散列值,然后部分改变输入值,一个具有强混淆特性的散列函数会产生一个完全不同的散列值,没有规律可循。
哈希算法有什么用
保护资料
加密存储在数据库的密码字符串。
确保传递真实的信息
消息或数据的接收者确认消息是否被篡改的性质,称为数据的真实性,也成为完整性。发信人通过将原消息和散列值一起发送,可以保证真实性。
散列表
散列表是散列函数的一个主要应用,使用散列表能够快速的按照关键字查找数据记录。
错误校正
使用一个散列函数可以很直观的检测出数据在传输时发生的错误。在数据的发送方,对将要发送的数据应用散列函数,并将计算的结果同原始数据一同发送。在数据的接收方,同样的散列函数被再一次应用到接收到的数据上,如果两次散列函数计算出来的结果不一致,那么就说明数据在传输的过程中某些地方有错误了。这就叫做冗余校验。
语音识别
对于像从一个已知列表中匹配一个MP3文件这样的应用,一种可能的方案是使用传统的散列函数——例如MD5,但是这种方案会对时间平移、CD读取错误、不同的音频压缩算法或者音量调整的实现机制等情况非常敏感。使用一些类似于MD5的方法有利于迅速找到那些严格相同(从音频文件的二进制数据来看)的音频文件,但是要找到全部相同(从音频文件的内容来看)的音频文件就需要使用其他更高级的算法了。
有哪些哈希算法
算法名称 | 输出大小(bits) | 内部大小 | 区块大小 | 长度大小 | 字符尺寸 | 碰撞情形 |
---|---|---|---|---|---|---|
HAVAL | 256/224/192/160/128 | 256 | 1024 | 64 | 32 | Y |
MD2 | 128 | 384 | 128 | No | 8 | 大多数 |
MD4 | 128 | 128 | 512 | 64 | 32 | Y |
MD5 | 128 | 128 | 512 | 64 | 32 | Y |
PANAMA | 256 | 8736 | 256 | N | 32 | Y |
RadioGatún | 任意长度 | 58 | 3 | N | 1-64 | N |
RIPEMD | 128 | 128 | 512 | 64 | 32 | Y |
RIPEMD-128/256 | 128/256 | 128/256 | 512 | 64 | 32 | N |
RIPEMD-160/320 | 160/320 | 160/320 | 512 | 64 | 32 | N |
SHA-0 | 160 | 160 | 512 | 64 | 32 | Y |
SHA-1 | 160 | 160 | 512 | 64 | 32 | 有缺陷 |
SHA-256/224 | 256/224 | 256 | 512 | 64 | 32 | N |
SHA-512/384 | 512/384 | 512 | 1024 | 128 | 64 | N |
Tiger(2)-192/160/128 | 192/160/128 | 192 | 512 | 64 | 64 | N |
WHIRLPOOL | 512 | 512 | 512 | 256 | 8 | N |
The End
以上摘取文献参考维基百科