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);
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.") } }
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!