栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

可逆的哈希函数?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

可逆的哈希函数?

鉴于这个问题,提供的答案似乎都没有特别有用。我遇到了同样的问题,出于非安全目的需要一个简单,可逆的哈希,并决定使用位重定位。它简单,快速,并且不需要了解布尔数学或crypo算法的任何知识,也不需要了解任何其他需要实际思考的知识。

最简单的方法可能是只向左移动一半,向右移动另一半:

def hash(n):  return ((0x0000FFFF & n)<<16) + ((0xFFFF0000 & n)>>16)

这是可逆的,因为hash(hash(n))= n,并且具有非连续对{n,m},n <m,其中hash(m)<hash(n)。

为了获得不太顺序的实现,您可能还需要考虑从[msb,z,…,a,lsb]到[msb,lsb,z,a,…]或[lsb,msb]的隔行排序,a,z,…]或其他任何您认为适合的数字重定位顺序。

(上面的函数对于适合32位的数字是安全的,可以保证较大的数字会导致冲突,并且需要更多的位掩码覆盖以防止出现问题。也就是说,对于任何非安全性uid而言,32位通常就足够了)。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/617621.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号