ホームページ > バックエンド開発 > Python チュートリアル > Python 3.3 の「hash()」関数が同じ文字列に対して異なる結果を生成するのはなぜですか?

Python 3.3 の「hash()」関数が同じ文字列に対して異なる結果を生成するのはなぜですか?

Mary-Kate Olsen
リリース: 2024-11-03 10:20:29
オリジナル
409 人が閲覧しました

Why Does the Python 3.3 `hash()` Function Produce Different Results for the Same String?

Python 3.3 ハッシュ関数の不一致: セキュリティ メカニズムの解明

Python 3.3 では、hash() 関数がさまざまな結果を返すことが観察されています。異なるセッションにわたる同じ文字列に対して。この一見謎めいた動作は、サービス拒否攻撃を阻止するために実装された意図的なセキュリティ メカニズムに根ざしています。

このメカニズムを理解するには、Python が起動時に設定されるランダム ハッシュ シードを利用していることを認識することが不可欠です。このオフセットをハッシュ計算に組み込むことにより、攻撃者は特に衝突を引き起こすことを目的としたキーを設計する能力を奪われます。

例として、文字列 "235" のハッシュ値を考えてみましょう:

>>> hash("235")
-310569535015251310
ログイン後にコピー

新しい Python コンソールを開始すると、ハッシュ値が変更されます。

>>> hash("235")
-1900164331622581997
ログイン後にコピー

この変動性は、辞書挿入の最悪の場合のパフォーマンスを悪用する攻撃者に対する保護手段として機能し、O(n^ 2)複雑さ。その結果、攻撃者はどのキーが衝突してサービス妨害を誘発するかを予測できません。

ただし、オフセットが単純な加算や減算を伴うものではないことは注目に値します。これはプレフィックスとサフィックスで構成されており、どちらも予測不可能で常に変化します。これにより、オフセットの保存と利用が複雑になります。

あるいは、より安定したハッシュ メカニズムを必要とするアプリケーションの場合は、堅牢な暗号化ハッシュ関数を提供する hashlib モジュールを検討することもできます。これは、その信頼性のため、pybloom プロジェクトで推奨される選択肢です。

以上がPython 3.3 の「hash()」関数が同じ文字列に対して異なる結果を生成するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート