Pourquoi la fonction `hash()` de Python 3.3 produit-elle des résultats différents pour la même chaîne ?

Mary-Kate Olsen
Libérer: 2024-11-03 10:20:29
original
364 Les gens l'ont consulté

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

Différences dans la fonction de hachage de Python 3.3 : dévoilement du mécanisme de sécurité

Dans Python 3.3, il a été observé que la fonction hash() renvoyait des résultats variables pour la même chaîne sur différentes sessions. Ce comportement apparemment énigmatique est enraciné dans un mécanisme de sécurité délibéré mis en œuvre pour contrecarrer les attaques par déni de service.

Pour comprendre ce mécanisme, il est essentiel de reconnaître que Python utilise une graine de hachage aléatoire définie au démarrage. En incorporant ce décalage dans les calculs de hachage, les attaquants sont privés de la possibilité de concevoir des clés spécifiquement destinées à provoquer des collisions.

Pour illustrer, considérons la valeur de hachage de la chaîne « 235 » :

>>> hash("235")
-310569535015251310
Copier après la connexion

Lors du démarrage d'une nouvelle console Python, la valeur de hachage change :

>>> hash("235")
-1900164331622581997
Copier après la connexion

Cette variabilité sert de mesure de protection contre les attaquants qui pourraient exploiter les pires performances des insertions de dict, conduisant à O(n^ 2) complexité. En conséquence, les attaquants ne peuvent pas prédire quelles clés entreront en collision et provoqueront un déni de service.

Cependant, il convient de noter que le décalage n'implique pas simplement une simple addition ou soustraction. Il comprend un préfixe et un suffixe, tous deux imprévisibles et en constante évolution. Cela complique le stockage et l'utilisation de l'offset.

Alternativement, pour les applications nécessitant un mécanisme de hachage plus stable, on peut explorer le module hashlib, qui offre des fonctions de hachage cryptographiques robustes. C'est le choix préféré dans le projet pybloom pour sa fiabilité.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal