哈希算法

302 阅读4分钟

哈希算法

什么是哈希算法

散列函数(Hash function)又称散列算法、哈希函数,是一种从任何一种数据中创建小的数字“指纹”的方法。

哈希算法有什么特点

确定性

如果两个散列值是不相同的(根据同一函数),那么这两个散列值的原始输入也是不相同的。

散列碰撞(collision)

散列函数的输入和输出不是唯一对应关系的,如果两个散列值相同,两个输入值很可能是相同的,但也可能不同。

不可逆性

一个设计优秀的加密散列函数是一个“单向”操作:对于给定的散列值,没有实用的方法可以计算出一个原始输入,也就是说很难伪造。

同时一个哈希值对应无数个明文,理论上也不知道哪个是正确对应的。

混淆特性

输入一些数据计算出散列值,然后部分改变输入值,一个具有强混淆特性的散列函数会产生一个完全不同的散列值,没有规律可循。

哈希算法有什么用

保护资料

加密存储在数据库的密码字符串。

确保传递真实的信息

消息或数据的接收者确认消息是否被篡改的性质,称为数据的真实性,也成为完整性。发信人通过将原消息和散列值一起发送,可以保证真实性。

散列表

散列表是散列函数的一个主要应用,使用散列表能够快速的按照关键字查找数据记录。

错误校正

使用一个散列函数可以很直观的检测出数据在传输时发生的错误。在数据的发送方,对将要发送的数据应用散列函数,并将计算的结果同原始数据一同发送。在数据的接收方,同样的散列函数被再一次应用到接收到的数据上,如果两次散列函数计算出来的结果不一致,那么就说明数据在传输的过程中某些地方有错误了。这就叫做冗余校验。

语音识别

对于像从一个已知列表中匹配一个MP3文件这样的应用,一种可能的方案是使用传统的散列函数——例如MD5,但是这种方案会对时间平移、CD读取错误、不同的音频压缩算法或者音量调整的实现机制等情况非常敏感。使用一些类似于MD5的方法有利于迅速找到那些严格相同(从音频文件的二进制数据来看)的音频文件,但是要找到全部相同(从音频文件的内容来看)的音频文件就需要使用其他更高级的算法了。

有哪些哈希算法

算法名称输出大小(bits)内部大小区块大小长度大小字符尺寸碰撞情形
HAVAL256/224/192/160/12825610246432Y
MD2128384128No8大多数
MD41281285126432Y
MD51281285126432Y
PANAMA2568736256N32Y
RadioGatún任意长度583N1-64N
RIPEMD1281285126432Y
RIPEMD-128/256128/256128/2565126432N
RIPEMD-160/320160/320160/3205126432N
SHA-01601605126432Y
SHA-11601605126432有缺陷
SHA-256/224256/2242565126432N
SHA-512/384512/384512102412864N
Tiger(2)-192/160/128192/160/1281925126464N
WHIRLPOOL5125125122568N

The End 以上摘取文献参考维基百科