Hash算法及其应用

Hash算法

其实hash和散列表示的一个意思,所以hash表就是散列表,hash算法就是散列算法,hash函数就是散列函数。

这说的hash算法,什么是hash算法?有一句很easy的总结:将任意长度的二进制串映射为固定长度的二进制串,这个映射规则就是hash算法。通过映射之后得到固定长度的二进制串值就是hash值

工业界的hash算法有很多比如md5、sha等。

ps:hash算法无法做到零冲突,这是由于抽屉原理决定的。

hash算法的要求

  • 从hash值不能反向推导出原始数据,所以hash算法也叫单向 hash算法。
  • 对输入数据非常敏感,哪怕原始数据只修改了一个bit,最后得到的hash值也大不相同。
  • 散列冲突概率小,对于不同的原始数据,hash值相同的概率值非常之小。
  • hash算法的执行效率要高,对长文本,也可以快速计算出hash值。

Hash算法的应用

应用1:散列函数

散列函数是散列表的关键,散列函数设计的好坏直接决定散列表冲突的概率和散列表性能。只不过散列函数对散列冲突要求不高,即便冲突也可以使用开放寻址法或者拉链法去解决问题。而且散列函数也不关心能否通过散列值反向解密。散列函数关心的是散列值能否均匀分布。

应用2:数据校验

由hash算法的特性中:原始数据稍有改变hash算法得出的散列值就会完全不同,来校验日常网络下载文件是否被篡改。

扫描二维码关注公众号,回复: 8565731 查看本文章

应用3:负载均衡

这里可以让客户端IP做hash运算得出散列值跟服务器列表大小取模,得到的值就是分发的那台服务器。以此来做到会话黏连形式的负载均衡。

应用4:数据分片

比如统计关键字出现的次数,在一个1T文件中有用户的各种搜索关键词,如何统计关键词出现的次数呢?

答:一台机器显然无法将这么大文件加载进内存,而且计算的时间也相当长。这里可以采用并行计算,就是说依次读取文件中每个关键词,对关键词进行hash算法运算得到的散列值再对我们事先准备好的N台机器取模,这样就可以把不同的关键词分配到这些计算机器上去了,然后让他们各自进行运算次数,最后合并即可。是不是想到了mapreduce,没错就是它,你们的小哪吒!

应用5:分布式缓存

这里可以了解下memcached的分布式缓存策略,一致性hash。

其他应用有安全加密、唯一标识等。

发布了222 篇原创文章 · 获赞 805 · 访问量 27万+

猜你喜欢

转载自blog.csdn.net/shengqianfeng/article/details/100156333
今日推荐