web-dev-qa-db-ja.com

GolangのBcryptパスワードハッシュ(Node.jsと互換性あり)?

ユーザー認証用にNode.js + passportを使用してサイトをセットアップしました。

ここでGolangに移行し、dbに保存されたユーザーパスワードで認証を行う必要があります。

Node.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();
        });
    });

GolangでNode.js bcryptと同じハッシュ文字列を作成する方法は?

55
Cid Huang

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
}
104
ANisus

bcryptパッケージ from go.crypto (ドキュメントは here )をご覧ください。

それをインストールするには、使用します

go get golang.org/x/crypto/bcrypt

Bcryptパッケージの使用法を説明するブログエントリは、 here にあります。それはパッケージを書いた人からですので、動作するはずです;)

使用しているnode.jsライブラリとの1つの違いは、goパッケージには(エクスポートされた)genSalt関数がありませんが、bcrypt.GenerateFromPasswordを呼び出すと自動的にソルトが生成されることです。

5
rob74