具有相同长度的完美散列函数(即无碰撞)

时间:2017-04-03 22:30:25

标签: python hash

我正在寻找一个不产生冲突的简单哈希函数。

我有一个字母数字序列(比如长16个字母),我希望每个序列映射到唯一的散列值。理想情况下,散列值与原始序列(16个字母长)的长度相同。

是否有一个简单的python哈希函数可以实现这一目标?

3 个答案:

答案 0 :(得分:1)

使用类似

的内容
u"".join([unichr(ord(spl[0])*100 + ord(spl[1])-30) for spl in [instr[i: i + 2] for i in range(0, 16, 2)]])

这是一个非常糟糕的转变:

1234567890123456变为ጸᐂᓌᖖᙖጸᐂᓌ

aAzZ09jdmekfADEF变为☇⿤ዛ⦮⫛⨔ᦊᬜ

IamBADatREQUIREM变为᳇⪸ᦊ☺ ΊᲸᬣ

zzaa009990123456变为〄☧ዒᙟᙖጸᐂᓌ

通过以下方式撤消:

"".join([chr(ord(num) / 100) + chr(ord(num) % 100 + 30) for num in unistring])

u"〄☧ዒᙟᙖጸᐂᓌ"变为zzaa009990123456

因此生命的循环就完成了。

答案 1 :(得分:0)

如果散列函数可以返回任何不可变对象,则直接返回字符串。无需将它们映射到任何东西。

def hash(s):
    return s

如果它需要返回整数,那么它很简单。 Python整数可以任意大,所以你要做的就是将字符串转换为具有相同字节的int。

def hash(s):
    return int.from_bytes(string.encode(), byteorder='big')

答案 2 :(得分:0)

散列函数返回一个相对于散列函数而不是输入字符串的固定长度的字符串,你想要的是一个密码

https://crypto.stackexchange.com/questions/8765/is-there-a-hash-function-which-has-no-collisions

ASCII value of a character in Python

isalnum()

当然,您要验证输入...您可以使用的字母数字:

{{1}}