Golang 中的 Bcrypt 密码散列(与 Node.js 兼容)?

新手上路,请多包涵

我用 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 相同的哈希字符串?

原文由 Cid Huang 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 490
2 个回答

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

原文由 ANisus 发布,翻译遵循 CC BY-SA 3.0 许可协议

查看 go.crypto 中的 bcrypt 包(文档在 此处)。

要安装它,请使用

go get golang.org/x/crypto/bcrypt

可以在 此处 找到描述 bcrypt 包用法的博客条目。它来自编写程序包的人,所以它应该可以工作;)

与您使用的 node.js 库的一个区别是 go 包没有(导出的) genSalt 函数,但它会在您调用时自动生成盐 bcrypt.GenerateFromPassword .

原文由 rob74 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题