J'ai mis en place un site avec Node.js + passeport pour l'authentification des utilisateurs.
Maintenant, je dois migrer vers Golang et je dois faire l'authentification avec les mots de passe utilisateur enregistrés dans db.
Le code de chiffrement Node.js est:
var bcrypt = require('bcrypt');
bcrypt.genSalt(10, function(err, salt) {
if(err) return next(err);
bcrypt.hash(user.password, salt, function(err, hash) {
if(err) return next(err);
user.password = hash;
next();
});
});
Comment créer la même chaîne de hachage que Node.js bcrypt avec Golang?
En utilisant le paquet golang.org/x/crypto/bcrypt , je pense que l'équivalent serait:
hashedPassword, err := bcrypt.GenerateFromPassword(password, bcrypt.DefaultCost)
Exemple de travail:
package main
import (
"golang.org/x/crypto/bcrypt"
"fmt"
)
func main() {
password := []byte("MyDarkSecret")
// Hashing the password with the default cost of 10
hashedPassword, err := bcrypt.GenerateFromPassword(password, bcrypt.DefaultCost)
if err != nil {
panic(err)
}
fmt.Println(string(hashedPassword))
// Comparing the password with the hash
err = bcrypt.CompareHashAndPassword(hashedPassword, password)
fmt.Println(err) // nil means it is a match
}
Jetez un œil au paquet bcrypt de go.crypto (les documents sont ici ).
Pour l'installer, utilisez
go get golang.org/x/crypto/bcrypt
Une entrée de blog décrivant l'utilisation du paquet bcrypt peut être trouvée ici . C'est du gars qui a écrit le paquet, donc ça devrait marcher;)
Une différence par rapport à la bibliothèque node.js que vous utilisez est que le package go n'a pas de fonction (exportée) genSalt
, mais il générera automatiquement le sel lorsque vous appellerez bcrypt.GenerateFromPassword
.