英文:
Bcrypt password hashing in Golang (compatible with Node.js)?
问题
我使用Node.js+passport设置了一个用于用户身份验证的网站。
现在我需要迁移到Golang,并且需要使用保存在数据库中的用户密码进行身份验证。
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相同的哈希字符串?
英文:
I set up a site with Node.js+passport for user authentication.
Now I need to migrate to Golang, and need to do authentication with the user passwords saved in db.
The Node.js encryption code is:
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();
});
});
How to make the same hashed string as Node.js bcrypt with Golang?
答案1
得分: 154
使用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")
// 使用默认成本对密码进行哈希
hashedPassword, err := bcrypt.GenerateFromPassword(password, bcrypt.DefaultCost)
if err != nil {
panic(err)
}
fmt.Println(string(hashedPassword))
// 将密码与哈希进行比较
err = bcrypt.CompareHashAndPassword(hashedPassword, password)
fmt.Println(err) // nil表示匹配成功
}
以上是翻译好的内容,请确认是否满意。
英文:
Using the golang.org/x/crypto/bcrypt package, I believe the equivalent would be:
hashedPassword, err := bcrypt.GenerateFromPassword(password, bcrypt.DefaultCost)
Working example:
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
}
答案2
得分: 8
请看一下来自go.crypto的bcrypt包(文档在这里)。
要安装它,请使用以下命令:
go get golang.org/x/crypto/bcrypt
可以在这里找到描述bcrypt包用法的博客文章。这篇文章是由编写该包的人撰写的,所以应该有效
与您正在使用的node.js库的一个区别是,go包没有(公开的)genSalt
函数,但是当您调用bcrypt.GenerateFromPassword
时,它会自动生成盐。
英文:
Take a look at the bcrypt package from go.crypto (docs are here).
To install it, use
go get golang.org/x/crypto/bcrypt
A blog entry describing the usage of the bcrypt package can be found here. It's from the guy who wrote the package, so it should work
One difference to the node.js library you are using is that the go package doesn't have an (exported) genSalt
function, but it will generate the salt automatically when you call bcrypt.GenerateFromPassword
.
答案3
得分: 2
首先,你需要导入bcrypt包:
go get golang.org/x/crypto/bcrypt
然后使用GenerateFromPassword函数:
bs, err := bcrypt.GenerateFromPassword([]byte(p), bcrypt.MinCost)
if err != nil {
http.Error(w, "Internal server error", http.StatusInternalServerError)
return
}
请注意,这是一个示例代码片段,用于使用bcrypt包生成密码哈希值。在实际使用时,你需要根据自己的需求进行适当的修改和调整。
英文:
Firstly you need import the bcrypt package
go get golang.org/x/crypto/bcrypt
Then use GenerateFromPassword
bs, err := bcrypt.GenerateFromPassword([]byte(p), bcrypt.MinCost)
if err != nil {
http.Error(w, "Internal server error", http.StatusInternalServerError)
return
}
答案4
得分: 0
另一种方式
dataEncrypt, _ := bcrypt.GenerateFromPassword([]byte(yourData), bcrypt.DefaultCost)
第二个参数'bcrypt'可以取多个值
用于比较的代码如下
error := bcrypt.CompareHashAndPassword([]byte(yourDataEncript), []byte(dataText))
在密码使用中非常有用。
英文:
Another way
dataEncrypt, _ := bcrypt.GenerateFromPassword([]byte(yourData), bcrypt.DefaultCost)
the second parameter 'bcrypt' can take multiple values
and for compare you can use
error := bcrypt.CompareHashAndPassword([]byte(yourDataEncript), []byte(dataText))
very useful for password use
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论