Golang 有人可以解释为什么哈希比较失败
Golang Can someone explain why the compare of hash is fail
我正在尝试开发一个用户登录系统,为此我正在测试golang的bcrypt功能。但是我遇到了一些有趣的情况。
我的bcrypt学习material就是来自于此,代码运行良好
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 is not the hash of the given password
.
谁能解释一下并指导我。
您正在使用的函数的文档说它将哈希与明文密码进行比较 - 而不是哈希与哈希:
CompareHashAndPassword compares a bcrypt hashed password with its possible plaintext equivalent. Returns nil on success, or an error on failure.
如果您要打印或比较每个生成的哈希值,它们也不会完全匹配(这就是重点)。但是您应该能够使用 CompareHashAndPassword
函数来检查密码是否用于生成给定的哈希值。
试试这个:
err := bcrypt.CompareHashAndPassword(hash1, []byte("123456"))
if err != nil {
log.Println(err)
} else {
log.Println("success")
}
我正在尝试开发一个用户登录系统,为此我正在测试golang的bcrypt功能。但是我遇到了一些有趣的情况。
我的bcrypt学习material就是来自于此,代码运行良好 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 is not the hash of the given password
.
谁能解释一下并指导我。
您正在使用的函数的文档说它将哈希与明文密码进行比较 - 而不是哈希与哈希:
CompareHashAndPassword compares a bcrypt hashed password with its possible plaintext equivalent. Returns nil on success, or an error on failure.
如果您要打印或比较每个生成的哈希值,它们也不会完全匹配(这就是重点)。但是您应该能够使用 CompareHashAndPassword
函数来检查密码是否用于生成给定的哈希值。
试试这个:
err := bcrypt.CompareHashAndPassword(hash1, []byte("123456"))
if err != nil {
log.Println(err)
} else {
log.Println("success")
}