全面理解哈希函数及其应用

1. 哈希函数

哈希函数是指一种能够讲任意数据转换为固定长度编码的一种函数,因为不同数据得到的哈希值可能相同,因此哈希过程一般是不可逆的,哈希函数可以应用于密码加密,哈希存储等方面。
好的哈西函数应该具备以下特点:

  1. 相同的数据得到的哈希值唯一
  2. 通过哈希值无法通过反向推导得到源数据
  3. 源数据发生微小改变,得到的哈希值完全不同,
  4. 长的字符也能快速的计算出哈希值
  5. 要尽量避免冲突(不同的数据得到的编码要尽量不同)

2. 哈希加密算法

比如对用户密码的加密,如果使用明文来存储用户密码,那么管理员很容易就能在后台获取用户的密码并登录系统,如果通过哈希函数进行加密,那么管理员在后台只能看到通过哈希函数计算得到的哈希值,并且由于哈希函数不可逆的特性,管理员无法通过哈希函数得到用户密码的明文,从而对用户密码进行加密。

当然,用户一般不会设定太过于复杂的密码,因此黑客可以穷举常用的密码组合并计算相应的哈希值,然后和用户的哈希值进行一一比对,从而获取密码明文;当然实际密码加密过程往往更加复杂,也更难被破解,这里不展开讲。

3. 哈希存储

哈希存储用一句话概括就是:将每个数据通过哈希函数编码成一个二进制编码,然后将这个二进制编码作为地址来保存这个数据

顺序表和链表在查找数据时,都需要从列表的第一个元素开始进行比对,直到检索到目标元素或者检索不到;而哈希存储可以根据源数据直接计算出数据的存储的地址,根据地址直接修改删除或校验数据即可,节省了数据比对的时间。

哈希表适用于那种查找性能要求高,数据元素之间无逻辑关系要求的情况。例如做文件校验或数字签名。当然还有快速查询功能的实现。

3.1 优点

  1. 哈希存储在数据的查找、删除、修改方面有较高的效率,可以在O(1)内遍历元素;

3.2 缺点

  1. 哈希是以 key-value的形式存储数据的,因此数据之间没有顺序,无法通过下标访问数据
  2. 占的空间大,牺牲空间换取了效率
  3. 当哈希表接近装满的状态时,性能下降得非常严重;因为当哈西表空间不足时需要执行扩容操作且扩容操作非常耗时。例如哈希表的长度是100,现在有第101个数要插入,这时,不仅哈希表的长度可能要扩展到150,且扩展之后所有的数都需要重新rehash。因此在设计哈希表时最好能够提前预知数据量的大小。

4. 哈希函数的其他应用

哈希函数的其他用用还包括: 数据校验、版权校验、大文件分块校验、负载均衡、服务器缩容、服务器扩容、虚拟节点,具体的介绍请参考此文章->什么是 hash? - 腾讯技术工程的回答 - 知乎

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

energy_百分百

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值