hash算法学习

443 阅读2分钟

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值的比较.如果一致表示是安全的文件,如果不一致进行提醒客户端文件被篡改.