Heim > Backend-Entwicklung > Python-Tutorial > Warum unterscheiden sich Python 3.3-Hashwerte zwischen Sitzungen?

Warum unterscheiden sich Python 3.3-Hashwerte zwischen Sitzungen?

Barbara Streisand
Freigeben: 2024-11-02 22:56:29
Original
231 Leute haben es durchsucht

Why Do Python 3.3 Hash Values Differ Between Sessions?

Hash-Funktion in Python 3.3: Warum zwischen Sitzungen unterschiedliche Ergebnisse zurückgegeben werden

In Python 3.3 verhält sich die interne hash()-Funktion unerwartet. Rückgabe unterschiedlicher Hashwerte für dieselbe Zeichenfolge in verschiedenen Sitzungen. Dieses Phänomen ist darauf zurückzuführen, dass Python als Sicherheitsmaßnahme einen zufälligen Hash-Seed verwendet.

Der zufällige Hash-Seed wird verwendet, um Angreifer daran zu hindern, vorhersehbare Schlüssel auszunutzen, die Teergruben-Angriffe verursachen könnten. Durch das Hinzufügen eines zufälligen Offsets zum Hash können Angreifer nicht vorhersehen, welche Schlüssel kollidieren.

Um das Verhalten der Hash-Funktion zu steuern, kann die Umgebungsvariable PYTHONHASHSEED festgelegt werden. Ein fester positiver Startwert kann angegeben werden, um Zufälligkeiten zu verhindern, während die Einstellung auf 0 den Startwert-Offset vollständig deaktiviert.

Vor Python 3.3 war der zufällige Hash-Startwert deaktiviert; Es wurde jedoch standardmäßig aktiviert. Diese Änderung betrifft nicht nur Mengen, sondern auch Wörterbücher in Python-Versionen 3.5 und früher.

Darüber hinaus weist object.__hash__() ein besonderes Verhalten auf:

  • Für str, bytes und datetime Bei Objekten werden die Hash-Werte mit einem unvorhersehbaren Wert „gesalzen“, wodurch sie innerhalb eines Prozesses konsistent, aber sitzungsübergreifend unvorhersehbar sind.
  • Diese Maßnahme verhindert Denial-of-Service-Angriffe, die auf der Ausnutzung der Worst-Case-Wörterbucheinfügung basieren.

Es ist wichtig zu beachten, dass Hash-Werte die Iterationsreihenfolge von Zuordnungen wie Diktate und Mengen beeinflussen. Eine solche Reihenfolge wird jedoch von Python nicht garantiert und kann zwischen verschiedenen Builds und Versionen variieren.

Für ein konsistentes Hashing sollten Sie die Verwendung des Hashlib-Moduls in Betracht ziehen, das kryptografische Hash-Funktionen bereitstellt. Darüber hinaus nutzt Pybloom diesen Ansatz aus Stabilitätsgründen.

Während der zufällige Hash-Seed-Offset es Angreifern erschwert, den Offset zu bestimmen, verhindert er auch die Speicherung des Offsets selbst. Dadurch wird jedoch sichergestellt, dass Angreifer keine Timing-Angriffe zur Bestimmung des Seeds nutzen können.

Das obige ist der detaillierte Inhalt vonWarum unterscheiden sich Python 3.3-Hashwerte zwischen Sitzungen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage