1.什么是hash算法
hash算法就是将无论多少位的数据,通过算法映射到指定位数的数据.
hash算法应该满足的原则
1.从hash后的值无法倒推原始值,即单向
2.数据只要有一位发生了改变,映射得到的hash值也会发生改变.即独一无二(大多情况下)
3.hash冲突要少,对于不同的原始数据,hash后的值相同的概率非常小
4.hash的时间要短,即无论多长的二进制数据都要在尽量短的时间内完成hash.
2.为什么会有hash冲突?
因为hash后的值的数量是有限的,例如MD5算法,最多可以有2^128位不同的数据.假如我们进行hash的数据超过了2^128(理论上不可能),就会产生不同的原始数据具有相同的hash值的情况.
3.hash算法的应用场景
3.1.加密
例如MD5算法.SHA算法等等.对于hash加密算法,要求hash冲突的概率尽量小,并且一定不能逆向计算.
3.2唯一标识
例如判断某个文件是否存在,我们可以查询比较他的hash值进行判断,对于比较大的文件,可以选取二进制码中的部分进行hash进行比较判断.
3.3散列算法
例如hashMap就是一个散列表,对于该种数据结构来说,由于采用了链表来解决hash冲突,所以对hash冲突的要求没那么高,并且也不要求单向计算无法逆推.
3.4数据完整验证
例如从网上下载资源,一般在网络上下载资源都是切割成很多片并行下载,例如一个2g的电影.可能分为100个20m的片同时下载,下载好了在集合在一起成为一个完整的文件,但是在网络运输过程中,可能会被注入一些信息,例如病毒等.那么我们就可以在下载之前对每一片进行hash,然后下载好之后进行hash值的比较.如果一致表示是安全的文件,如果不一致进行提醒客户端文件被篡改.