我需要一個散列函數來獲取一串十進制數並返回一個十進制數作爲散列值。自定義散列函數的python庫
例如:
>> def my_simple_hash(*args):
return reduce(lambda x1, x2: 2*x1 + x2, args)
>>> my_simple_hash(1,3,4)
14
>>> my_simple_hash(1,4,3)
15
>>> my_simple_hash(4,3,1)
23
我的問題是:
- 沒有Python有一個內置的lib更有效地做到這一點?
- 我怎麼能在相對小的範圍內輸出散列值?
問題2說明:
因爲1,3,4具有六個不同的組合如下:
1,3,4
1,4,3
3,1,4
3,4,1
4,1,3
4,3,1
相應的輸出是[14, 15, 18, 21, 21, 23]
,我期望的six
輸出的散列值會像[1,2,3,4,6]
(小範圍)
任何意見,將不勝感激。 由於事先:-)
我一般會建議不要推出自己的,並與同時幾乎保證不會有衝突的哈希('hashlib.sha256()'),而不是去。 –
這很大程度上取決於你想要的 - sha256是一個密碼散列函數,計算相對較慢,需要字節輸入併產生字節輸出。良好的非密碼哈希計算速度快,結果值均勻分佈且碰撞不會太多。 – janbrohl
你打算如何處理這個散列?輸入整數的範圍有多大?輸入序列的典型大小是多少?輸出的範圍應該多大?避免碰撞有多重要?您可以通過[保持格式的加密](https://en.wikipedia.org/wiki/Format-preserving_encryption)變體來滿足您的需求,它可以是完整的加密強度實現,也可以是更快,更簡單的版本。 –