python – 可逆散列函数?

我需要一个可逆的哈希函数(显然,输入的大小要比输出要小得多),将输入以随机的方式映射到输出。基本上,我想要一个像“123”一样的数字,像“9874362483910978”一样的数字,但不能保持比较,所以不能一直如此,如果x1> x2,f(x1)> f(x2)(但也不能总是假)。

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

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

我不知道我是否清楚,或者如果这样的算法存在,但我会感谢任何和所有的帮助!

鉴于这个问题,所提供的答案都不是特别有用。我有同样的问题,需要一个简单的,可逆的哈希,用于不安全的目的,并决定随便一点点搬迁。最简单的可能是:

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

这是可逆的,在该散列(hash(n))= n中,并且具有非顺序对{n,m},n < m,其中hash(m)散列(N)。 为了获得较少顺序的实现,您可能还需要考虑从[msb,z,…,a,lsb]到[msb,lsb,z,a,…]或[lsb,msb ,a,z,…]或您感觉到的任何其他重定位为您处理的数字提供了适当的非顺序序列。 (上述功能对于适合32位的数字是安全的,较大的数字保证会引起冲突,并且需要一些更多的位掩码覆盖来防止出现问题。那就是说,32位通常足够用于任何uid)。

翻译自:https://stackoverflow.com/questions/4273466/reversible-hash-function

转载注明原文:python – 可逆散列函数?