ユーザー認証用に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と同じハッシュ文字列を作成する方法は?
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パッケージ from go.crypto (ドキュメントは here )をご覧ください。
それをインストールするには、使用します
go get golang.org/x/crypto/bcrypt
Bcryptパッケージの使用法を説明するブログエントリは、 here にあります。それはパッケージを書いた人からですので、動作するはずです;)
使用しているnode.jsライブラリとの1つの違いは、goパッケージには(エクスポートされた)genSalt
関数がありませんが、bcrypt.GenerateFromPassword
を呼び出すと自動的にソルトが生成されることです。