我有以下哈希函数,我想知道是否有一种方法可以基于哈希值计算此函数的输入。预先感谢
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])
答案 0 :(得分:0)
总而言之,否。不能反向应用有意义的哈希函数。
散列函数的作用是,它们试图创建原始消息的“签名”。签名必须足够小,通常用于验证或用作某些存储的索引。
为此,输出域必须比输入域小得多,换句话说,多个输入可能对应于同一输出。在您的情况下,字符串"000"
和"000000000"
将具有相同的哈希值,并且仅凭哈希就无法将一个与另一个区分开。
答案 1 :(得分:0)
根据散列函数的第二个原像;只要您有足够的时间和金钱,任何哈希函数的解决方案就很多。
现在假设您有时间和金钱,并生成了给定哈希值(直到n位)的所有可能的第二个前像,并说我们有x个解。
for i in space(1..2^n)
check hash(i) == TheHash
即使x = 2,攻击者也将无法确定输出哈希值的真实前映像。但是请记住,从攻击的角度出发,攻击者已经找到x解决方案来破坏您的哈希。
答案 2 :(得分:0)
有可能,但是除非尝试所有可能的消息,否则从其哈希值生成消息是不可行的。