Maison >développement back-end >Tutoriel Python >Pourquoi la fonction `hash()` de Python 3.3 produit-elle des résultats différents pour la même chaîne ?
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
Lors du démarrage d'une nouvelle console Python, la valeur de hachage change :
>>> hash("235") -1900164331622581997
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!