gpt4 book ai didi

go - Bcrypt hashedSecret 太短,不能成为 bcrypted 密码

转载 作者:IT王子 更新时间:2023-10-29 01:56:59 29 4
gpt4 key购买 nike

我想使用 Go 创建一个用户身份验证系统,但我无法登录帐户。我使用 bcrypt 来散列密码,然后将其保存到数据库 (MySQL)。当我想将它与插入的密码进行比较时,就会出现问题。我有这个错误:hashedSecret 太短,不能成为 bcrypted 密码。我不知道我做错了什么。这是我的代码:

models.go

type User struct {
ID string `json:"id"`
Username string `json:"username"`
Password string `json:"password"`
IsAdmin bool `json:"is_admin"`
}

user-routes.go(登录函数)

err := db.QueryRow("SELECT Password FROM Users WHERE Username = ?", user.Username).Scan(&storedPass)
if err != nil {
log.Fatal(err)
}
// hashed password
fmt.Println(storedPass, []byte(storedPass))
err = bcrypt.CompareHashAndPassword([]byte(storedPass), []byte(user.Password))
if err != nil {
// Here is error
fmt.Println(err.Error())
}

user-routes.go(注册函数)

stmt, err := db.Prepare(`INSERT INTO Users(Username, Password, IsAdmin) VALUES (?, ?, 0)`)
if err != nil {
log.Fatal(err)
}
hash, _ := bcrypt.GenerateFromPassword([]byte(user.Password), 10)
res, err := stmt.Exec(user.Username, string(hash))

看起来错误是在我将散列密码与插入的密码进行比较时出现的。此外,我将密码保存到数据库中没有任何错误。

+----+----------+----------------------------------------------------+---------+
| ID | Username | Password | IsAdmin |
+----+----------+----------------------------------------------------+---------+
| 38 | test2 | $2a$10$5WwRQahtjgmaeIKRGXGZNOLVAv5EXUidRwbnZeryq9e | 0 |
+----+----------+----------------------------------------------------+---------+

最佳答案

bcrypt 生成 59-60 字节的哈希值(详见 this answer)。为了将散列存储为 varchar,您需要确保其大小足够。根据您的comment ,你使用 varchar(50),这是不够的,这就是改变它的大小解决你的问题的原因。

关于go - Bcrypt hashedSecret 太短,不能成为 bcrypted 密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51008351/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com