数据结构与算法整理总结---哈希算法

哈希算法的定义和原理⾮常简单,基本上⼀句话就可以概括了。将任意⻓度的⼆进制值串映射为固定⻓度的⼆进制值串,这个映射的规则就是哈希算法。⽽通过原始数据映射之后得到的⼆进制值串就是哈希值。但是,要想设计⼀个优秀的哈希算法并不 容易,根据我的经验,我总结了需要满⾜的⼏点要求:

1.从哈希值不能反向推导出原始数据(所以哈希算法也叫单向哈希算法);

2.对输⼊数据⾮常敏感,哪怕原始数据只修改了⼀个Bit,最后得到的哈希值也⼤不相同;

3.散列冲突的概率要很⼩,对于不同的原始数据,哈希值相同的概率⾮常⼩;

4.哈希算法的执⾏效率要尽量⾼效,针对较⻓的⽂本,也能快速地计算出哈希值。

以MD5哈希算法为例:

我们分别对“今天我来讲哈希算法”和“jiajia”这两个⽂本,计算MD5哈希值,得到两串看起来毫⽆规律的字符串(MD5的哈希值是128位的Bit⻓度,为了⽅便表示,我把它们转化成了16进制编码)。可以看出来,⽆论要哈希的⽂本有多⻓、多短,通过MD5哈希之后,得到的哈希值的⻓度都是相同的,⽽且得到的哈希值看起来像⼀堆随机数,完全没有规律。

MD5(“今天我来讲哈希算法”) = bb4767201ad42c74e650c1b6c03d78fa

MD5(“jiajia”) = cd611a31ea969b908932d44d126d195b

我们再来看两个⾮常相似的⽂本,“我今天讲哈希算法!”和“我今天讲哈希算法”。这两个⽂本只有⼀个感叹号的区别。如果⽤MD5哈希算法分别计算它们的哈希值,你会发现,尽管只有⼀字之差,得到的哈希值也是完全不同的。

MD5(“我今天讲哈希算法!”) = 425f0d5a917188d2c3c3dc85b5e4f2cb

MD5(“我今天讲哈希算法”) = a1fb91ac128e6aa37fe42c663971ac3d

通过哈希算法得到的哈希值,很难反向推导出原始数据。⽐如上⾯的例⼦中,我们就很难通过哈希值“a1fb91ac128e6aa37fe42c663971ac3d”反推出对应的⽂本“我今天讲哈希算法”。

哈希算法的应⽤

应⽤⼀:安全加密

应⽤⼆:唯⼀标识

应⽤三:数据校验

应⽤四:散列函数

应⽤五:负载均衡

应⽤六:数据分⽚

应⽤七:分布式存储

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!