数据结构学习笔记 - 哈希算法

本文介绍了哈希算法的基本概念,强调了其在安全加密、唯一标识、数据校验、散列函数、负载均衡和数据分片等方面的重要应用。讨论了哈希算法的特点,包括不可逆性、敏感性和冲突概率,并提到了如何通过加盐来增强安全性。
摘要由CSDN通过智能技术生成

哈希算法

简介

将任意长度的二进制值串映射为固定长度的二进制值串的映射规则就是哈希算法
得到的二进制值串就是哈希值

优秀的哈希算法包括

  • 从哈希值不能反推出原始数据
  • 对输入数据非常敏感, 哪怕一点小修改, 结果也大不相同
  • 散列冲突的概率要很小, 对不同原始数据, 哈希值相同的概率非常小
  • 执行效率要高效, 针对较长的文本, 也能快速计算出哈希值

鸽巢原理

为什么哈希算法无法做到零冲突
因为哈希值的长度是固定的, 那么就表示数据是有限的, 而要哈希的数据是无限的, 就必然会有数据存在哈希值相同的情况

哈希算法的应用

  1. 安全加密
    MD5, SHA, DES, AES等
    虽然加密后不容易反推出原始数据, 但是存在字典攻击, 黑客通过庞大的原文对密文的字典表, 很容易猜中用户的常用密码
    针对字典攻击, 又可以使用加盐的方式来防御, 比如对原始密码加入再加入复杂的字符串后哈希, 来增加破解难度
    安全和攻击是一种博弈关系, 不存在绝对的安全, 所有安全措施只是增加攻击成本而已
  2. 唯一标识
    针对较大的文件或者图片, 取部分字节通过哈希算法生成唯一标识, 再存储到散列表中, 可以快速判断图片是否存在
  3. 数据校验
    使用BT下载时, 基于p2p协议会从多个电脑上并行下载, 一部电影会分为多个文件块
    可以使用种子文件中保存的每个文件块的哈希值来判断, 每个文件块是否被人修改或者缺失
  4. 散列函数
    散列表的散列函数也是哈希算法的一种应用
    不过相对其他, 散列函数对冲突要求低很多, 且对于能否反向解密也不关心, 而更加关心散列后的值是否分布均匀
  5. 负载均衡
    负载均衡的算法有轮询, 随机, 加权轮询等, 如果要实现同一个客户端, 在一次会话中的所有请求都路由到同一个服务器的话, 可以借助哈希算法
    通过哈希算法, 对客户端ip地址或者会话id计算哈希值, 将取得的哈希值与服务器列表的大小取模运算, 最终得到的值就是应该被路由到的服务器编号
  6. 数据分片
    分布式计算中, 对数据根据key哈希, 再根据机器数取模, key相同的数据就可以分配到同一台机器上处理
  7. 分布式存储
    分布式存储中常用的一致性哈希算法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值