登录
首页 >  Golang >  Go问答

为何在 Golang 中哈希比较失败的原因能解释一下吗?

来源:stackoverflow

时间:2024-03-02 14:15:25 218浏览 收藏

对于一个Golang开发者来说,牢固扎实的基础是十分重要的,golang学习网就来带大家一点点的掌握基础知识点。今天本篇文章带大家了解《为何在 Golang 中哈希比较失败的原因能解释一下吗?》,主要介绍了,希望对大家的知识积累有所帮助,快点收藏起来吧,否则需要时就找不到了!

问题内容

我正在尝试开发一个用户登录系统,为此我正在测试golang的bcrypt功能。但我遇到了一些有趣的情况。

我的bcrypt学习资料就是来自这个,代码运行良好 https://medium.com/@jcox250/password-hash-salt-using-golang-b041dc94cb72

但是当我编写自己的代码时,相比之下它总是失败。

package main

import (
    "log"

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

func main() {
    hash1, _ := bcrypt.GenerateFromPassword([]byte("123456"), bcrypt.MinCost)
    hash2, _ := bcrypt.GenerateFromPassword([]byte("123456"), bcrypt.MinCost)

    err := bcrypt.CompareHashAndPassword(hash1, hash2)

    if err != nil {
        log.Println(err)
    } else {
        log.Println("success")
    }
}

由于哈希字符串是相同的“123456”,所以我的代码输出应该是 success,但结果是 crypto/bcrypt:hashedpassword 不是给定密码 的哈希值。

有人可以解释一下并指导我吗?


解决方案


您正在使用的函数的文档称它将哈希值与明文密码进行比较 - 而不是哈希值与哈希值:

comparehashandpassword 将 bcrypt 哈希密码与其可能的明文等效密码进行比较。成功时返回 nil,失败时返回错误。

如果您要打印或比较每个生成的哈希值,它们也不会完全匹配(这就是重点)。但是您应该能够使用 comparehashandpassword 函数来检查是否使用密码来生成给定的哈希值。

试试这个:

err := bcrypt.CompareHashAndPassword(hash1, []byte("123456"))
if err != nil {
    log.Println(err)
} else {
    log.Println("success")
}

本篇关于《为何在 Golang 中哈希比较失败的原因能解释一下吗?》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>