现在我们已经知道哈希函数是什么以及有哪些种类,这篇文章就准备聊聊其具体有哪些应用场景,废话不多说,开搞!

ppx2.jpg

正文

通常来说,哈希函数的应用场景有如下几类

接下来分别介绍它们

qidai.jpeg

文件校验

我们比较熟悉的校验算法有 奇偶校验CRC校验,这2种校验并没有抗数据篡改的能力,它们一定程度上能检测并纠正数据传输中的信道误码,但却不能防止对数据的恶意破坏。

而作为哈希函数的一员,MD5算法的”数字指纹”特性,使它成为应用最广泛的一种文件完整性校验算法

数字签名

发送报文时,发送方用一个 哈希函数 从报文文本中生成报文摘要,然后用发送方的 私钥 对这个摘要进行加密,这个加密后的摘要将作为报文的 数字签名报文 一起发送给接收方,接收方首先用与发送方 一样的哈希函数 从接收到的原始报文中计算出 报文摘要,接着用 公钥 来对报文附加的数字签名进行解密,如果这两个摘要 相同、那么接收方就能确认该报文是发送方的

数字签名有两种功效:一是能确定消息确实是由发送方签名并发出来的,因为别人假冒不了发送方的签名。二是数字签名能确定消息的完整性

因为数字签名的特点是它代表了文件的特征,文件如果发生改变,数字摘要的值也将发生变化。不同的文件将得到不同的数字摘要

错误校正

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

语音识别

对于像从一个已知列表中匹配一个MP3文件这样的应用,一种可能的方案是使用传统的散列函数——例如MD5,但是这种方案会对时间平移、CD读取错误、不同的音频压缩算法或者音量调整的实现机制等情况非常敏感

使用一些类似于MD5的方法有利于迅速找到那些严格相同(从音频文件的二进制数据来看)的音频文件,但是要找到全部相同(从音频文件的内容来看)的音频文件就需要使用其他更高级的算法了

结语

其实哈希函数的应用场景多数取决于其两点特性

基于它俩,就可以构造出安全可靠的验证方式

666.jpg

这里多说一句,在用户登录和修改密码的场景中,不要只单纯地对密码进行md5,而是应该将密码与盐(一个随机字符串)进行结合后再进行md5运算(形如:result = md5(password + sault) ),这样就保证了即使黑客通过消息摘要破解得到了原始信息,但是由于盐的存在,那么也就无法知晓用户真正的密码,从而提高了网站的安全性