Хеширование пароля Bcrypt в Golang (совместимо с узлом.js)?
Я создал сайт с узла.на JS+паспорт для проверки подлинности пользователей.
теперь мне нужно перейти на Golang и выполнить аутентификацию с помощью паролей пользователей, сохраненных в db.
Узел.код шифрования js:
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();
});
});
Как сделать ту же хэшированную строку, что и Node.Яш осуществляется с Golang?
2 ответов
используя golang.org/x/crypto/bcrypt пакет, я считаю, что эквивалент будет:
hashedPassword, err := bcrypt.GenerateFromPassword(password, bcrypt.DefaultCost)
пример:
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
}
посмотри пакет bcrypt С перейти.crypto (документы здесь).
чтобы установить его, используйте
go get golang.org/x/crypto/bcrypt
(вы должны установить ртутный чтобы иметь возможность использовать go get с code.google.com)
запись в блоге, описывающая использование пакета bcrypt, можно найти здесь. Это от парня, который написал пакет, поэтому он должен работать;)
большая разница узел.библиотека js, которую вы используете, заключается в том, что пакет go не имеет (экспортированной) функции genSalt, но он будет генерировать соль автоматически при вызове bcrypt.GenerateFromPassword.