在Golang中encryption密码哈希(与Node.js兼容)?

我用Node.js +护照设置了一个用于用户authentication的站点。

现在我需要迁移到Golang,并且需要使用保存在db中的用户密码进行authentication。

Node.jsencryption代码是:

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.js使用Golang相同的散列string?

使用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 } 

看看go.crypto的bcrypt包 (文档在这里 )。

要安装它,请使用

 go get golang.org/x/crypto/bcrypt 

(你必须安装mercurial才能使用code.google.com去获取)

描述bcrypt包使用的博客条目可以在这里find。 这是来自那个编写软件包的人,所以它应该工作;)

与您使用的node.js库不同的是,go软件包没有(导出的)genSalt函数,但当您调用bcrypt.GenerateFromPassword时,它将自动生成salt。