Go语言 “crypto/bcrypt:hashedPassword不是给定密码的哈希值”

xqnpmsa8  于 2023-08-01  发布在  Go
关注(0)|答案(2)|浏览(146)

注册用户后,我尝试使用相同的密码登录,但由于错误而无法登录。我通过加密密码和普通密码来比较函数。但我无法登录。

type request struct {
    PhoneNumber string `json:"phone_number"`
    Password    string `json:"password"`
}
var body request
if err := c.BodyParser(&body); err != nil {
    return c.Status(fiber.StatusUnprocessableEntity).SendString("Wrong credentials.")
}
var user model.User
err := model.DB.Where(model.User{PhoneNumber: body.PhoneNumber}).First(&user)
if err.Error != nil {
    return c.Status(fiber.StatusUnprocessableEntity).SendString("Wrong credentials.")
}
matched := bcrypt.CompareHashAndPassword([]byte(user.Password), []byte(body.Password))
//matched := CheckPasswordHash(body.Password, user.Password)

fmt.Println(bcrypt.CompareHashAndPassword([]byte("$2a$14$AphYClfW8V1HZh4.6kSD1OpkTzvS9dTc/1qgKesbCUW5.9BMDmzMW"), []byte("123456")))
//check := CheckPasswordHash(body.Password, user.Password)
fmt.Println(matched)
fmt.Println("Hash pass: "+user.Password)
fmt.Println("Raw pass: "+body.Password)
fmt.Println(matched)

if matched != nil {
    return c.Status(fiber.StatusUnprocessableEntity).SendString("Wrong credentials2.")
}

字符串
我也打印我的哈希和普通密码来检查。但我都通过了下面是我的控制台打印:

crypto/bcrypt: hashedPassword is not the hash of the given password
crypto/bcrypt: hashedPassword is not the hash of the given password
Hash pass: $2a$14$AphYClfW8V1HZh4.6kSD1OpkTzvS9dTc/1qgKesbCUW5.9BMDmzMW
Raw pass: 123456
!exclude .idea


请帮助我,或者如果你有一个替代的方法来加密密码,并与普通密码比较,请让我知道。

biswetbf

biswetbf1#

我曾经偶然发现这个问题,在看到你的散列密码后

$2a$14$AphYClfW8V1HZh4.6kSD1OpkTzvS9dTc/1qgKesbCUW5.9BMDmzMW

字符串
注意正斜杠,
我100%确定这个问题和我的一样。
这是因为您从已经加密密码加密密码,换句话说,两次加密或更多。

5kgi1eie

5kgi1eie2#

最近我遇到了类似的问题,后来我发现我的问题是mysql数据库密码字段被限制为vchar(30),,在我改变大小后得到了它的工作

相关问题