簡體   English   中英

哈希值的算術運算

[英]Arithmetic Operations on Hash Values

有沒有通過算術運算關閉的哈希算法? 更具體地說,如果ab是兩個整數,是否存在滿足以下條件的hash(a + b) == hash(a) + hash(b)hashhash(a + b) == hash(a) + hash(b) (並且類似地用於-*/ )? 是否可以通過某種方式修改這些運算符以實現此條件?

假設h(a+b) = h(a) + h(b) 使用感應你也可以說h(c * a)如果c是常數,等於h(c*a) = c * h(a) 因此,這意味着函數h必須是線性的(通過線性代數中的線性映射的定義),並且每個線性函數(例如h(x) = c * x (c是整數和常數))都是你的問題。 但是,它是線性的,不會有用的哈希函數! 此外,您可以對-進行相同的操作。

對於乘法,它可能更復雜。 h(a*b) = h(a)*h(b) 從該方程式可以得出,對於每個常數m我們都可以具有h(a^m) = h(a)^m 現在,就像您現在一樣,我們可以用像x = p_1^a_1 * p_2^a_2 * ... * p_k^a_k這樣的因子寫每個數字,所有p_i都是質數。 因此, h(x) = h(p_1)^a_1 * h(p_2)^a_2 * ... * h(p_k)^a_k 因此,質數上的h值很重要,其他值將由這些值確定。

是否可以通過某種方式修改這些運算符以實現此條件?

是:取消哈希。 因此,對於任何運算符a•b,請計算hash(hash⁻(a)•hashh(b))。

這適用於任何雙射散列,典型的整數散列屬於該類別:乘以常數的組合,按位旋轉,按常數的XOR,添加常數,某些XOR /移位的組成。 例如Murmurhash終結器。

對於散列和運算符的某些組合,它比較容易,例如,乘法散列是線性的,因此它已經分布在加法和減法上。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM