目录
一、哈希算法简介
简单来说,就是将任意长度的二进制值串映射为固定长度的二进制值串,这个映射的规则就是哈希算法,而通过原始数据映射之后得到的二进制值串就是哈希值
哈希算法的特点:
- 从哈希值不能反向推导出原始数据(所以哈希算法也叫单向哈希算法);
- 对输入数据非常敏感,哪怕原始数据只修改了一个 Bit,最后得到的哈希值也大不相同;
- 散列冲突的概率要很小,对于不同的原始数据,哈希值相同的概率非常小;哈希算法的执行效率要尽量高效,针对较长的文本,也能快速地计算出哈希值。
二、哈希算法的应用
1、安全加密
常见的安全加密算法有:
加密方式 |
常见算法 |
优点 |
缺点 |
哈希算法 |
MD5、SHA |
加解密快速,使用简单; |
无法做到零冲突,即不同的数据哈希值可能是相同的。比如MD5(128位)最多能表示2^128个数据 |
对称加密 |
DES、3DES、AES、TDEA、RC5、Blowfish、IDEA、... |
加解密快速,使用简单; 常用于对大量数据加密 |
密码/密钥需要在网络上传输,不安全;秘钥管理困难;安全等级依赖秘钥长度 |
非对称加密 |
RSA、ECC、... |
只有公钥在网络上传输,私钥留在本地,相对安全 |
加解密比较慢,使用复杂;有被劫持风险 |
混合模式(对称和非对称) |
使用对称加密模式,但是对加密的密码使用非对称加密方式传输 |
2、唯一标识
哈希算法可以对大数据做信息摘要,通过一个较短的二进制编码来表示很大的数据。
3、数据校验
用于校验数据的完整性和正确性。
4、散列函数
5、负载均衡
6、数据分片
7、分布式存储
当有海量的数据需要存储时,为了提高读写的速度、写入能力,一般采用分布式的方法来存储数据,比如分布式缓存。即将海量的数据分布缓存到多台机器上面。
比如有1000W张图片需要缓存,假如要使用A、B、C 这3台服务器来缓存,而且图片的名称是唯一的,那么就可以就可以对【图片的名称】计算哈希值,然后对服务器数量取模;那么
hash(图片名称) % 3 = 0 的图片将会被存储到A服务器上
hash(图片名称) % 3 = 1 的图片将会被存储到B服务器上
hash(图片名称) % 3 = 2 的图片将会被存储到C服务器上
但是如果当图片数量变化,服务器数量发生变化时,几乎所有的图片的缓存位置都会发生变化,上面得方法就不太合适了。这是就需要采用一致性哈希算法来解决这个问题了。
三、一致性哈希算法
这位大佬讲得非常的通俗易懂,膜拜膜拜
http://www.zsythink.net/archives/1182
四、说明
本文部分内容为学习王争老师在极客时间专栏——《数据结构与算法之美》的学习总结。仅仅是个人学习备忘,如有侵犯权益,请联系我,立即修改。