Python 3.3 中的雜湊函數:為什麼會話之間會傳回不同的結果
在Python 3.3 中,內部hash() 函數內部hash() 函數內部hash()的行為異常,在不同會話中為同一字串傳回不同的哈希值。這種現像源自於 Python 使用隨機雜湊種子作為安全措施。
隨機雜湊種子用於防止攻擊者利用可預測的金鑰來導致 tar-pitting 攻擊。透過向哈希添加隨機偏移量,攻擊者無法預測哪些按鍵會發生衝突。
要控制雜湊函數的行為,可以設定 PYTHONHASHSEED 環境變數。可以指定固定的正種子來阻止隨機性,而將其設為 0 會完全停用種子偏移。
在 Python 3.3 之前,隨機哈希種子被停用;但是,它預設為啟用。此變更不僅影響集合,還影響 Python 3.5 及更早版本中的字典。
此外,object.__hash__() 有一個特殊的行為:
需要注意的是,雜湊值會影響字典和集合等映射的迭代順序。但是,Python 不保證這種順序,並且在不同的建置和版本之間可能會有所不同。
為了一致的哈希,請考慮使用 hashlib 模組,它提供加密雜湊函數。此外,pybloom 利用這種方法來提高穩定性。
雖然隨機雜湊種子偏移量使攻擊者難以確定偏移量,但它也阻止了偏移量本身的儲存。然而,這確保了攻擊者無法使用定時攻擊來確定種子。
以上是為什麼 Python 3.3 的雜湊值在會話之間不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!