我认真学习了Go语言-密码哈希化

首先

你好。我是一名正在某学校学习编程等内容的服务器端程序员。
现在,我将介绍在使用golang实现登录功能时,如何进行密码哈希化的方法作为新年的第一篇文章。

准备好

您可以使用 golang.org/x/crypto/bcrypt 来安全地生成和验证密码哈希。
请首先切换到$GOPATH,然后运行以下命令。

go get golang.org/x/crypto/bcrypt

将要在DB等处注册的密码进行哈希处理

import "golang.org/x/crypto/bcrypt"

func main() {
    hash, err := passwordHash("登録用パスワード")
    if err != nil {
        panic(err)
    }
    println(hash)
}

// パスワードハッシュを作る関数
func passwordHash(pw string) (string, error) {
    hash, err := bcrypt.GenerateFromPassword([]byte(pw), bcrypt.DefaultCost)
    if err != nil {
        return "", err
    }
    return string(hash), err
}

由于GenerateFromPassword需要一个[]byte类型的参数,所以需要将从表单等输入的密码转换为[]byte类型。
由于返回值也是[]byte类型,所以在保存到DB等情况下需要将其转换为string类型。

检查已注册的密码哈希是否与输入的密码匹配。

import "golang.org/x/crypto/bcrypt"

func main() {
    // hashはDBなどからとってくる
    err := passwordVerify(hash, "入力されたパスワード")
    if err != nil {
        panic(err)
    }

    println("認証しました")
}

// 登録したパスワードハッシュが入力パスワードにマッチするかどうかを調べる関数
func passwordVerify(hash, pw string) error {
    return bcrypt.CompareHashAndPassword([]byte(hash), []byte(pw))
}

由于`CompareHashAndPassword`需要传入`[]byte`类型,因此需要进行类型转换。

如果有任何错误或建议,请随时与我联系。感谢您阅读到最后。

广告
将在 10 秒后关闭
bannerAds