2023年7月27日发(作者:)
全⾯理解哈希函数及其应⽤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. 哈希函数的其他应⽤哈希函数的其他⽤⽤还包括: 数据校验、版权校验、⼤⽂件分块校验、负载均衡、服务器缩容、服务器扩容、虚拟节点,具体的介绍请参考此⽂章->
发布者:admin,转转请注明出处:http://www.yc00.com/web/1690460621a352554.html
评论列表(0条)