当前位置:网站首页>Hash 这些知识你也应该知道
Hash 这些知识你也应该知道
2022-08-05 06:36:00 【代码与思维】
什么是Hash
Hash中文翻译为散列,又成为“哈希”,是一类函数的统称,其特点是定义域无限,值域有限。把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值。
简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。
Hash的作用
hash就是将任意长度的消息压缩成某一固定长度的消息摘要的函数。相当于文件的指纹。
由于文件是无限的,而映射后的字符串能表示的位数是有限的。因此可能会存在不同的key对应相同的Hash值。这就是存在碰撞的可能。
Hash存储数据
hash表的本质其实就是数组,hash表中通常存放的是键值对Entry。
这里的学号是个key,哈希表就是根据key值来通过哈希函数计算得到一个值,这个值就是下标值,用来确定这个Entry要存放在哈希表中哪个位置。
hash碰撞的解决方法
hash碰撞的解决方式是开放寻址法和拉链法。
开放寻址法指的是,当前数组位置1被占用了,就放到下一个位置2上去,如果2也被占用了,就继续往下找,直到找到空位置。
拉链法采用的是链表的方式,这个时候位置1就不单单存放的是Entry了,此时的Entry还要额外保存一个next指针,指向数组外的另一个位置,将李四安排在这里,张三那个Entry中的next指针就指向李四的这个位置,也就是保存的这个位置的内存地址。如果还有冲突,就把又冲突的那个Entry放到一个新位置上,然后李四的Entry指向它,这样就形成一个链表。
开放寻址法和拉链法都是想办法找到下一个空位置来存发生冲突的值。
Hash的实际用途
唯一性验证
- java中用于判断变量是否相等都放进 hashCode() 中,⼀起⽣成⼀个尽量不会碰撞的整数
数据完整性验证:
- 从⽹络上下载⽂件后,通过⽐对⽂件的 Hash 值(例如 MD5、SHA1),可以确认下载的⽂件是否有损坏。如果下载的⽂件 Hash 值和⽂件提供⽅给出的 Hash 值⼀致,则证明下载的⽂件是完好⽆损的
快速查找:
- HashMap
隐私保护:
- 当重要数据必须暴露的时候,有事可以选择暴露它的 Hash 值(例如 MD5),以保障原数据的安全。例如⽹站登录时,可以只保存⽤户密码的 Hash 值,在每次登录验证时只需要将输⼊的密码的 Hash 值和数据库中保存的 Hash 值作⽐对就好,⽹站⽆需知道⽤户的密码。这样,当⽹站数据失窃时,⽤户不会因为⾃⼰的密码被盗导致其他⽹站的安全也受到威胁。
作者:Arrom
链接:https://juejin.cn/post/7127862424887099406
来源:稀土掘金
边栏推荐
- Jenkins详细配置
- 日本卫生设备行业协会:日本温水喷淋马桶座出货量达1亿套
- AI + video technology helps to ensure campus security, how to build a campus intelligent security platform?
- AH8669-AC380/VAC220V转降5V12V24V500MA内电源芯片IC方案
- 【内推】新相微电子
- 基于快速行进平方法的水面无人船路径规划
- 怎么样避免线上内存泄漏
- Put Cloudflare on the website (take Tencent Cloud as an example)
- RNote108---显示R程序的运行进度
- 今天虚竹哥又发现了一款好用的国产化API工具
猜你喜欢
随机推荐
DevExpress中针对指定列进行百分比转换
IO process thread -> communication between processes -> day7
在STM32中使用printf函数
Using printf function in STM32
MySQL:JDBC编程
After working for 3 years, I recalled the comparison between the past and the present when I first started, and joked about my testing career
Week 8 Document Clustering(文本聚类)
HR:这样的简历我只看了5秒就扔了,软件测试简历模板想要的进。
Rapid Medical超小体积且唯一可调的取栓器获得FDA核准
typescript64-映射类型
ndk编译so库
UDP group (multi)cast
在小程序中关于js数字精度丢失的解决办法
铠侠携手Aerospike提升数据库应用性能
Jenkins详细配置
微信小程序仿input组件、虚拟键盘
《基于R语言的自动数据收集》--第3章 XML和JSON
日本卫生设备行业协会:日本温水喷淋马桶座出货量达1亿套
AI+视频技术助力保障校园安全,校园智能安防平台该如何建设?
【2022 DSCTF决赛wp】