哈希算法(应⽤场景)
1.哈希算法介绍
将任意长度的⼆进制值串映射为固定长度的⼆进制值串,该映射的规则就是哈希算法。
2.哈希算法满⾜条件
1.从哈希值不能反向推导出原始数据(哈希算法,单向哈希算法)
2.对输⼊数据⾮常敏感,哪怕原始数据只修改了⼀个bit,最后得到的哈希值也⼤不相同
3.散列冲突的概率要很⼩,对于不同的原始数据,哈希值相同的概率⾮常⼩
4.哈希算法的执⾏效率要尽量⾼,针对较长的⽂本,能够快速计算出哈希值
3.哈希算法应⽤场景
3.1.安全加密
最常⽤的加密的哈希算法是MD5(MD5消息摘要算法)和SHA(安全散列算法)。对于加密来说,两个⽅⾯⽐较重要:
种子哈希转换链接1.很难根据哈希值反向推到出原始数据(加密的⽬的就是防⽌原始数据泄露)
2.尽量减少碰撞冲突概率(理论上没有办法做到完全不冲突)。这⾥可以了解鸽巢原理,假如有10个鸽巢,却有11只鸽⼦。
在实际项⽬中,为了更加保障数据安全,使⽤原始数据+盐(salt)⽅式,⼀起计算哈希值的⽅式
3.2.唯⼀标识
如果要在海量图库中,搜索某张图⽚是否存在。是否可以直接通过图⽚的元信息(⽐如图⽚名称)进⾏⽐对?
答案是:不能。因为可能存在名称相同,但是图⽚内容不同;或者名称不同,但是图⽚内容相同的情况。
那么该如何实现搜索呢?
答案:获取图⽚的⼆进制信息(⼆进制码串开头取100个字节+中间取100个字节+最后取100个字节),将拼接在⼀起的300个字节通过哈希算法,得到哈希值。作为图⽚的唯⼀标识即可。
3.3.数据校验
电驴这样的 BT 下载软件我们都有⽤过。我们知道,BT 下载的原理是基于 P2P 协议的。我们从多个机器上并⾏下载⼀个 2GB 的电影,这个电影⽂件可能会被分割成很多⽂件块(⽐如可以分成100块,每块⼤约 20MB)。等所有的⽂件块都下载完成之后,再组装成⼀个完整的电影⽂件就⾏了。
我们知道,⽹络传输是不安全的,下载的⽂件块有可能是被宿主机器恶意修改过的,⼜或者下载过程中出现了错误,所以下载的⽂件块可能不是完整的。如果我们没有能⼒检测这种恶意修改或者⽂件下载出错,就会导致最终合并后的电影⽆法观看,甚⾄导致电脑中毒。
现在的问题是,如何来校验⽂件块的安全、正确、完整呢?
我们通过哈希算法,对100个⽂件块分别取哈希值,并且保存在种⼦⽂件中。哈希算法有⼀个特点,对数据很敏感。只要⽂件块的内容有⼀丁点⼉的改变,最后计算出的哈希值就会完全不同。
所以,当⽂件块下载完成之后,我们可以通过相同的哈希算法,对下载好的⽂件块逐⼀求哈希值,然后跟种⼦⽂件中保存的哈希值⽐对。如果不同,说明这个⽂件块不完整或者被篡改了,需要再重新从其他宿主机器上下载这个⽂件块。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。