Bcrypt password hashing in Golang (compatible with Node.js)?
我用node.js+passport设置了一个站点,用于用户身份验证。
现在我需要迁移到golang,并且需要使用保存在db中的用户密码进行身份验证。
node.js加密代码为:
1 2 3 4 5 6 7 8 9 10 11 | 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包,我相信等效软件将是:
1 | hashedPassword, err := bcrypt.GenerateFromPassword(password, bcrypt.DefaultCost) |
号
工作示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | 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包(文档在这里)。
要安装它,请使用
1 | go get golang.org/x/crypto/bcrypt |
在这里可以找到描述bcrypt包用法的日志。这是那个写包裹的人写的,所以应该可以用;)
与您使用的node.js库的一个区别是go包没有(导出的)