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:
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!