Golang / App Engine-безопасное хеширование пароля пользователя
Обычно я использую библиотеку bcrypt для хэширования паролей, но не могу этого сделать из-за использования библиотекой syscall
. Я также пробовал scrypt. Какие еще пути безопасны,и какой из них будет лучшим?
1 ответ:
Взгляните на go.крипто . Он предлагает поддержку pbkdf2 и bcrypt. Обе реализации чисто написаны в Go и должны отлично работать на GAE.
Наиболее простой в использовании, вероятно, bcrypt. Чтобы запустить пакет:
go get golang.org/x/crypto/bcrypt
Пример использования:
import "golang.org/x/crypto/bcrypt" func clear(b []byte) { for i := 0; i < len(b); i++ { b[i] = 0; } } func Crypt(password []byte) ([]byte, error) { defer clear(password) return bcrypt.GenerateFromPassword(password, bcrypt.DefaultCost) } ctext, err := Crypt(pass) if err != nil { log.Fatal(err) } fmt.Println(string(ctext))
Вывод будет примерно таким:
$2a$10$sylGijT5CIJZ9ViJsxZOS.IB2tOtJ40hf82eFbTwq87iVAOb5GL8e
Если вы хотите просто хэш, используйте pbkdf2. Пример:
import "golang.org/x/crypto/pbkdf2" func HashPassword(password, salt []byte) []byte { defer clear(password) return pbkdf2.Key(password, salt, 4096, sha256.Size, sha256.New) } pass := []byte("foo") salt := []byte("bar") fmt.Printf("%x\n", HashPassword(pass, salt))