Хеширование пароля 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.