Maison > développement back-end > Tutoriel Python > L'algorithme Bcrypt pour le hachage sécurisé des mots de passe

L'algorithme Bcrypt pour le hachage sécurisé des mots de passe

Patricia Arquette
Libérer: 2024-12-16 03:34:10
original
265 Les gens l'ont consulté

Le hachage est une fonction cryptographique qui ne peut être inversée. Il faut une entrée de taille aléatoire pour produire des valeurs de taille fixe. Ces valeurs de taille fixe sont appelées valeurs de hachage, et la fonction cryptographique est appelée fonction de hachage. Le hachage a une nature cohérente et prévisible, ce qui signifie que la même entrée produira toujours la même valeur de hachage. Il présente également l'effet d'avalanche, ce qui signifie que même un léger changement dans l'entrée entraîne une valeur de hachage radicalement différente, garantissant une sécurité et une incertitude élevées.

The Bcrypt Algorithm for Secure Password Hashing

Le hachage utilise souvent le hachage salé, où une chaîne aléatoire unique appelée sel est ajoutée à l'entrée avant le hachage, rendant chaque hachage unique même pour des entrées identiques

Le hachage salé est principalement utilisé dans le hachage de mots de passe. L'un de ces algorithmes est l'algorithme bcrypt.

Algorithme Bcrypt

L'algorithme Bcrypt est basé sur l'algorithme de cryptage Blowfish. bcrypt génère un sel unique (chaîne aléatoire) pour chaque mot de passe, puis le sel est combiné avec le mot de passe avant le hachage. . Cela rend Bcrypt résistant aux attaques par force brute.

Comment fonctionne Bcrypt

  1. Génération de sel :
    Bcrypt génère un sel aléatoire d'une longueur de 16 octets et généralement au format Base64.

  2. Hachage de la chaîne donnée :
    Le sel est combiné avec le mot de passe et la chaîne résultante est transmise via l'algorithme de cryptage Blowfish. bcrypt applique plusieurs cycles de hachage définis par le facteur de travail. Le nombre élevé de tours le rend coûteux en termes de calcul, ce qui améliore sa résistance aux attaques par force brute.
    Le facteur de travail, également appelé coût, est défini par la valeur logarithmique de 2. Si le coût est de 12, cela signifie 2^12 tours. Plus le facteur coût est élevé, plus il faut de temps pour générer un hachage, ce qui rend plus difficile pour les attaquants de forcer brutalement les mots de passe.

  3. Format et longueur du hachage Bcrypt :

 y$odwBFokG9vTK/BAaRXKKl.9Q8KHXHeYSqpLi/gSNpmzSwQcaJb.gS
Copier après la connexion
Copier après la connexion

La chaîne donnée se compose de :

  • $2y$ : version bcrypt
  • 12 est le facteur de coût (2 ^ 12 tours)
  • Les 22 caractères suivants (odwBFokG9vTK/BAaRXKKl.) sont du sel codé en Base64
  • Les caractères restants sont le hachage codé en Base64 du mot de passe et du sel.

Python Implémentation de l'algorithme Bcrypt

Dépendances requises

import hashlib
import os
import base64
Copier après la connexion
Copier après la connexion

Initialisation de classe

class Bcrypt:
    def __init__(self, rounds=12, salt_length=22):
        self.rounds = rounds
        self.salt_length = salt_length
Copier après la connexion
Copier après la connexion
  • La classe Bcrypt encapsule la fonctionnalité permettant de hacher et de vérifier les mots de passe

  • Paramètres :

Générer un sel

 y$odwBFokG9vTK/BAaRXKKl.9Q8KHXHeYSqpLi/gSNpmzSwQcaJb.gS
Copier après la connexion
Copier après la connexion

La fonction generate_salt crée un sel aléatoire, qui sera une valeur unique qui sera ajoutée aux mots de passe pour garantir que même des mots de passe identiques produisent des hachages différents.

Hacher un mot de passe

import hashlib
import os
import base64
Copier après la connexion
Copier après la connexion
  • La fonction bcrypt_hash hache en toute sécurité le mot de passe avec le sel et le facteur de coût fournis.

  • et la fonction hash_password génère un hachage sécurisé pour le mot de passe donné avec un sel aléatoire.

Code:

class Bcrypt:
    def __init__(self, rounds=12, salt_length=22):
        self.rounds = rounds
        self.salt_length = salt_length
Copier après la connexion
Copier après la connexion

Sortir:

def generate_salt(self, salt_length=None):
        if salt_length is None:
            salt_length = self.salt_length
        return base64.b64encode(os.urandom(salt_length)).decode('utf-8')[:salt_length]
Copier après la connexion

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:dev.to
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