问题描述
我有以下哈希函数,我想知道是否有一种方法可以基于哈希值计算此函数的输入。 提前致谢
def hash(message):
key = [0x0f, 0xff, 0x00]
for char in message:
n = ord(char)
key[0] ^= n
key[1] &= n
key[2] |= n
return ’’ + chr(key[0]) + chr(key[1]) + chr(key[2])
1楼
总之, 不 。 没有有意义的哈希函数可以反向应用。
散列函数的作用是尝试创建原始消息的“签名”。 签名必须足够小,通常用于验证或作为某些存储的索引。
为此,输出域必须显着小于输入域,换句话说,多个输入可能对应于同一输出。
在您的情况下,字符串"000"
和"000000000"
将具有相同的哈希值,并且"000000000"
哈希就无法将一个与另一个区分开。
2楼
就散列函数的第二个原像而言; 只要您有足够的时间和金钱,对于任何哈希函数,就有无数种解决方案。
现在假设,您有时间和金钱,并生成了给定哈希值直至n位的所有可能的第二个前像,并说我们有x个解。
for i in space(1..2^n)
check hash(i) == TheHash
即使x = 2,攻击者也将无法确定输出哈希值的真实前映像。 但是请记住,从攻击的角度出发,攻击者已经找到x解决方案来破坏您的哈希。
3楼
可能,但是除了尝试所有可能的消息外,从其哈希值生成消息是不可行的。