我寫了一個用於密碼和密鑰生成的散列函數,但很快就意識到能夠顛倒散列值是非常有價值的,所以我寫了一個相反的函數,但是它的工作量很大。我不明白爲什麼這個DOESNT工作。爲什麼這個unhash函數不能反轉這個散列?
function hash64(n:uint):uint
{
n = (~n) + (n << 21);
n = n^(n >> 24);
n = (n + (n << 3)) + (n << 8);
n = n ^(n >> 14);
n = (n + (n << 2)) + (n << 4);
n = n^(n >> 28);
n = n + (n << 31);
return n;
}
function unhash64(n:uint):uint
{
n = (~n) - (n >> 21);
n = n^(n << 24);
n = (n - (n >> 3)) - (n >> 8);
n = n^(n << 14);
n = (n - (n >> 2)) - (n >> 4);
n = n^(n << 28);
n = n - (n >> 31);
return n;
}
輸出饋送1000時:
Hashed from 1000: 1221775646
Unhash output: 1963490760
你期望什麼? 1000? – Organis
是的,這是不可能的嗎? – ZxZ
這就是密碼學的重點,實際上:它不應該有可能從哈希中重新創建原始數據。否則,在過去的幾年裏,不是蠻力的,而是它。 – Organis