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