重温算法Day25:哈希算法的应用

哈希算法:将任意长度的二进制值串映射为固定长度的二进制值串,这个映射的规则就是哈希算法,而通过原始数据映射之后得到的二进制值串就是哈希值。

hash算法应用
安全加密、
MD5(MD5 Message-Digest Algorithm,MD5 消息摘要算法)
SHA(Secure Hash Algorithm,安全散列算法)
DES(Data Encryption Standard,数据加密标准)
AES(Advanced Encryption Standard,高级加密标准)

鸽巢原理(也叫抽屉原理)。这个原理本身很简单,它是说,如果有 10 个鸽巢,有 11 只鸽子,那肯定有 1 个鸽巢中的鸽子数量多于 1 个,换句话说就是,肯定有 2 只鸽子在 1 个鸽巢内。这是hash冲突的原因。
唯一标识
给每一个图片取一个唯一标识,或者说信息摘要。
从图片的二进制码串开头取 100 个字节,从中间取 100 个字节,从最后再取 100 个字节,然后将这 300 个字节放到一块,通过哈希算法(比如 MD5),得到一个哈希字符串,用它作为图片的唯一标识。

数据校验
P2P协议下载,把文件分成了100块,计算100个md5,下载完成后,再校验这100块,校验md5值算法相同。

散列函数
散列函数中用到的散列算法,更加关注散列后的值是否能平均分布,也就是,一组数据是否能均匀地散列在各个槽中。
脱库问题
维护一个常用密码的字典表,把字典中的每个密码用哈希算法计算哈希值,然后拿哈希值跟脱库后的密文比对。如果相同,基本上就可以认为,这个加密之后的密码对应的明文就是字典中的这个密码。
针对字典攻击,我们可以引入一个盐(salt),跟用户的密码组合在一起,增加密码的复杂度。

负载均衡
轮询、随机、加权轮询
对客户端 IP 地址或者会话 ID 计算哈希值,将取得的哈希值与服务器列表的大小进行取模运算,最终得到的值就是应该被路由到的服务器编号。
(标签写,kvu联合取md5,取模,选chan,接收者轮询从dbpool取连接,一个连接一次发一批请求)

数据分片
1.如1T的大文件,统计关键词。
可以先对数据进行分片,然后采用多台机器处理的方法,来提高处理速度。
假如n台机器并行处理,从搜索记录的日志文件中,依次读出每个搜索关键词,并且通过哈希函数计算哈希值,然后再跟 n 取模,最终得到的值,就是应该被分配到的机器编号。
2.dbserver分若干个片(如64,128)。
通过哈希函数对数据计算哈希值,然后取模分配到对应的片上。

分布式存储
海量的数据缓存到多台机器上。通过哈希算法对数据取哈希值,然后对机器个数取模,这个最终值就是应该存储的缓存机器编号。

一致性哈希算法
假设我们有 k 个机器,数据的哈希值的范围是[0, MAX]。我们将整个范围划分成 m 个小区间(m 远大于 k),每个机器负责 m/k 个小区间。当有新机器加入的时候,我们就将某几个小区间的数据,从原来的机器中搬移到新的机器中。这样,既不用全部重新哈希、搬移数据,也保持了各个机器上数据数量的均衡。


 

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页