go-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 asked 2019-11-17T01:28:19Z
2个解决方案
107 votes

我相信使用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 answered 2019-11-17T01:28:53Z
5 votes

看一下go.crypto的bcrypt包(此处是文档)。

要安装它,请使用

go get golang.org/x/crypto/bcrypt

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

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

rob74 answered 2019-11-17T01:29:37Z
translate from https://stackoverflow.com:/questions/23259586/bcrypt-password-hashing-in-golang-compatible-with-node-js