我想創建一個函數,根據散列表中我希望值去的地方生成散列鍵。如何逆向工程散列函數
我的散列函數是(a + b * (key)) % c = hash value
。我見過一個similar question這對SO,和我的嘗試與d
更換b * (key)
,只是這樣做:
private int ReverseModulus(int a, int b, int c, int hashValue)
{
if(hashValue >= c)
return -1;
if(a < hashValue)
return (hashValue - a)/b;
return (c + hashValue - a)/b;
}
但似乎大部分時間hashValue != Hash(ReverseModulus(a,b,c, hashValue))
。
我想知道,如果做法是錯誤的,或者如果有隻是在代碼中的錯誤。
通過設計,哈希是單向的。 – Servy
我想你想讀[完美散列函數(https://en.wikipedia.org/wiki/Perfect_hash_function) –
我知道有沒有鑰匙和哈希值之間的一個一對一的關係,但我只是想從無限數量的密鑰中得到一個將產生所需散列值的密鑰。例如,您可以通過從0開始迭代直到獲得正確的散列值來蠻力。 –