Maison > développement back-end > Golang > Comment puis-je garantir la compatibilité entre le Bcrypt de Node.js et le Bcrypt de Golang pour le hachage de mot de passe ?

Comment puis-je garantir la compatibilité entre le Bcrypt de Node.js et le Bcrypt de Golang pour le hachage de mot de passe ?

DDD
Libérer: 2024-12-06 06:09:15
original
964 Les gens l'ont consulté

How Can I Ensure Compatibility Between Node.js's Bcrypt and Golang's Bcrypt for Password Hashing?

Hachage de mots de passe dans Golang compatible avec Bcrypt de Node.js

Dans Node.js, un package bcrypt est couramment utilisé pour hacher les mots de passe des utilisateurs. Lors de la migration vers Golang, il est essentiel de maintenir la compatibilité avec les mots de passe hachés existants stockés dans la base de données.

Code de hachage Node.js Bcrypt

Le code Node.js fourni utilise le module bcrypt pour générer une chaîne hachée. Il utilise deux fonctions séquentielles : genSalt pour créer un sel et un hachage pour générer le hachage à l'aide du mot de passe et du sel.

Équivalent de hachage Golang Bcrypt

L'implémentation Golang équivalente utilisant le package golang.org/x/crypto/bcrypt ressemblerait à :

hashedPassword, err := bcrypt.GenerateFromPassword(password, bcrypt.DefaultCost);
Copier après la connexion

Working Exemple

Pour démontrer la compatibilité, l'exemple de code suivant illustre le hachage d'un mot de passe dans Golang et sa vérification par rapport au hachage généré par Node.js :

package main

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

func main() {
    // Generate a hash from a password.
    password := []byte("SecretPassword")
    hashedPassword, err := bcrypt.GenerateFromPassword(password, bcrypt.DefaultCost)
    if err != nil {
        panic(err)
    }
    fmt.Println("Generated Hash:", string(hashedPassword))

    // Simulate Node.js-generated hash.
    nodejsHash := []byte("a$n8J51m8dYIm/3CmaFCizgO93Gkj/3RZIiI4S2G8NkyL2fKvsBpfHy")

    // Compare with the Golang-generated hash.
    err = bcrypt.CompareHashAndPassword(nodejsHash, password)
    if err != nil {
        fmt.Println("Passwords do not match.")
    } else {
        fmt.Println("Passwords match.")
    }
}
Copier après la connexion

Utilisation

Pour utiliser ce code, assurez-vous d'abord que le package Golang nécessaire est installé et importé comme indiqué dans l'exemple. Ensuite, transmettez simplement votre mot de passe à GenerateFromPassword pour générer une chaîne hachée. Pour la validation du mot de passe, utilisez CompareHashAndPassword pour comparer le mot de passe haché de la base de données au mot de passe fourni. Si l'erreur renvoyée est nulle, les mots de passe correspondent, conformément aux normes Node.js et Golang.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal