為什麼 Python 3.3 的雜湊值在會話之間不同?

Barbara Streisand
發布: 2024-11-02 22:56:29
原創
172 人瀏覽過

Why Do Python 3.3 Hash Values Differ Between Sessions?

Python 3.3 中的雜湊函數:為什麼會話之間會傳回不同的結果

在Python 3.3 中,內部hash() 函數內部hash() 函數內部hash()的行為異常,在不同會話中為同一字串傳回不同的哈希值。這種現像源自於 Python 使用隨機雜湊種子作為安全措施。

隨機雜湊種子用於防止攻擊者利用可預測的金鑰來導致 tar-pitting 攻擊。透過向哈希添加隨機偏移量,攻擊者無法預測哪些按鍵會發生衝突。

要控制雜湊函數的行為,可以設定 PYTHONHASHSEED 環境變數。可以指定固定的正種子來阻止隨機性,而將其設為 0 會完全停用種子偏移。

在 Python 3.3 之前,隨機哈希種子被停用;但是,它預設為啟用。此變更不僅影響集合,還影響 Python 3.5 及更早版本中的字典。

此外,object.__hash__() 有一個特殊的行為:

  • 對於str、bytes 和datetime物件時,雜湊值會以不可預測的值「加鹽」 ,使它們在進程內一致,但在會話之間不可預測。
  • 此措施可防止基於利用最壞情況字典插入的拒絕服務攻擊。

需要注意的是,雜湊值會影響字典和集合等映射的迭代順序。但是,Python 不保證這種順序,並且在不同的建置和版本之間可能會有所不同。

為了一致的哈希,請考慮使用 hashlib 模組,它提供加​​密雜湊函數。此外,pybloom 利用這種方法來提高穩定性。

雖然隨機雜湊種子偏移量使攻擊者難以確定偏移量,但它也阻止了偏移量本身的儲存。然而,這確保了攻擊者無法使用定時攻擊來確定種子。

以上是為什麼 Python 3.3 的雜湊值在會話之間不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板