gpt4 book ai didi

python - 可逆哈希函数?

转载 作者:IT老高 更新时间:2023-10-28 22:02:04 26 4
gpt4 key购买 nike

我需要一个可逆的哈希函数(显然输入的大小比输出的小得多),它以一种随机的方式将输入映射到输出。基本上,我想要一种将“123”之类的数字转换为“9874362483910978”之类的更大数字的方法,但不是以保留比较的方式,因此如果 x1 > x2,f(x1 ) > f(x2)(但也不能总是为假)。

这个用例是我需要找到一种方法将小数字转换成更大的、看起来随机的数字。它们实际上并不需要是随机的(实际上,它们需要是确定性的,因此相同的输入总是映射到相同的输出),但它们确实需要看起来随机(至少在 base64 编码时)转换成字符串,因此按 Z 位移位将不起作用,因为相似的数字将具有相似的 MSB)。

此外,简单(快速)的计算和反转是一个优点,但不是必需的。

我不知道我是否清楚,或者是否存在这样的算法,但我将不胜感激!

最佳答案

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

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

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,...] 或您认为的任何其他重定位为您处理的数字提供了适当的非顺序序列,甚至在顶部添加 XOR 以进行峰值去序列化。

(上面的函数对于适合 32 位的数字是安全的,更大的数字肯定会导致冲突,并且需要更多的位掩码覆盖来防止问题。也就是说,32 位通常对于任何非安全 uid 来说就足够了)。

还可以查看 multiplicative inverse安迪·海登(Andy Hayden)给出的答案,如下。

关于python - 可逆哈希函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4273466/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com