bcrypt Go : guide complet avec exemples de hachage

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

bcrypt pour Go : guide complet pour le hachage de mots de passe

La sécurité des données utilisateur est l'un des enjeux majeurs du développement web moderne. Stocker des mots de passe en clair est inacceptable, et un simple hachage via MD5 ou SHA-1 est depuis longtemps considéré comme non sécurisé en raison de sa vulnérabilité aux attaques par force brute. La bibliothèque bcrypt pour Go offre un algorithme de hachage adaptatif fiable et éprouvé, résistant à la fois aux attaques par dictionnaire et aux attaques par tables arc-en-ciel.

L'algorithme bcrypt a été conçu en 1999 par Niels Provos et David Mazières, basé sur le chiffrement Blowfish. Sa caractéristique clé est la complexité adaptative : vous pouvez augmenter le nombre d'itérations de hachage, rendant le cassage des mots de passe de plus en plus coûteux à mesure que la puissance de calcul augmente. Dans l'écosystème Go, la bibliothèque standard golang.org/x/crypto/bcrypt est une extension officielle maintenue par l'équipe de développement de Go.

Dans cet article, nous allons détailler tous les aspects de l'utilisation de bcrypt en Go : de l'installation et de l'utilisation de base aux techniques avancées et aux erreurs courantes. Vous apprendrez à hacher correctement les mots de passe, à les comparer avec des hachages, à choisir le coût optimal (cost) et à intégrer bcrypt dans des applications réelles.

Installation

La bibliothèque bcrypt pour Go ne fait pas partie de la bibliothèque standard, mais elle est incluse dans le sous-module officiel x/crypto. L'installation se fait en une seule commande :

go get golang.org/x/crypto/bcrypt

Après avoir exécuté cette commande, une dépendance apparaîtra dans votre fichier go.mod et vous pourrez importer le package dans votre code :

import "golang.org/x/crypto/bcrypt"

Assurez-vous d'avoir installé Go version 1.13 ou supérieure (1.21+ est recommandé). Si vous utilisez les modules (ce qui est la norme en 2024), la dépendance sera téléchargée automatiquement.

Démarrage rapide : exemple minimal fonctionnel

Commençons par l'exemple le plus simple : le hachage d'un mot de passe et sa vérification. C'est la base que vous utiliserez dans tous vos projets.

package main

import (
    "fmt"
    "log"
    "golang.org/x/crypto/bcrypt"
)

func main() {
    // Mot de passe utilisateur d'origine
    password := []byte("mySecretPassword123!")

    // Hachage du mot de passe avec le coût par défaut (10)
    hashedPassword, err := bcrypt.GenerateFromPassword(password, bcrypt.DefaultCost)
    if err != nil {
        log.Fatal(err)
    }

    fmt.Printf("Hachage du mot de passe : %s\n", hashedPassword)

    // Vérification avec le bon mot de passe
    err = bcrypt.CompareHashAndPassword(hashedPassword, password)
    if err != nil {
        fmt.Println("Le mot de passe ne correspond pas !")
    } else {
        fmt.Println("✓ Le mot de passe correspond !")
    }

    // Vérification avec un mauvais mot de passe
    wrongPassword := []byte("wrongPassword")
    err = bcrypt.CompareHashAndPassword(hashedPassword, wrongPassword)
    if err != nil {
        fmt.Println("✗ Le mot de passe ne correspond pas (comme prévu)")
    }
}

Ce code fait trois choses : il génère un hachage, vérifie un mot de passe correct et s'assure qu'un mot de passe incorrect est rejeté. Notez que GenerateFromPassword génère automatiquement un sel aléatoire et l'intègre dans le hachage, donc vous obtiendrez des hachages différents à chaque fois pour le même mot de passe.

Méthodes et fonctions principales

Le package bcrypt fournit une API petite mais très bien conçue. Examinons toutes les fonctions principales avec des exemples.

1. GenerateFromPassword

Signature : func GenerateFromPassword(password []byte, cost int) ([]byte, error)

Description : Fonction principale pour hacher un mot de passe. Elle prend le mot de passe sous forme de slice d'octets et le coût (cost) — un indicateur logarithmique du nombre d'itérations. Elle retourne le hachage au format bcrypt standard (contenant le sel, le coût

Recommendations