为了账号安全,请及时绑定邮箱和手机立即绑定

为什么哈希这么慢?

为什么哈希这么慢?

Go
繁花如伊 2022-05-23 16:31:04
我正在开发一个 Web 应用程序。为了对密码进行哈希处理,我使用了以下逻辑package coreimport (    "math/rand"    "golang.org/x/crypto/bcrypt")type User struct {    Username string `json:"username"`    Password string `json:"password"`}type Hasher interface {    HashPassword()}func (u *User) HashPassword() {    cost := rand.Intn(28) + 4    //TODO: Handle error    hashedPassword, _ := bcrypt.GenerateFromPassword([]byte(u.Password), cost)    u.Password = string(hashedPassword)}然后在处理请求时func HandleRegister(w http.ResponseWriter, r *http.Request) {    var user core.User    var hasher core.Hasher    hasher = &user    //TODO: Handle error    _ = json.NewDecoder(r.Body).Decode(&user)    hasher.HashPassword()    fmt.Println(user)}出于安全原因,我使用随机成本进行散列。问题是当成本变大时,过程真的很慢。我Postman用来向我的服务器发送请求,但它真的很慢。为什么呢?我的实施错了吗?注意:在我的 SQLite 数据库中,我选择TEXT密码列的类型来存储散列密码。使用BLOBtype 而不是会更好TEXT吗?
查看完整描述

1 回答

?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

您的最大成本是 32。这意味着 2^32 轮密钥扩展。即使是一个简单的循环,只遍历 1 到 2^32 之间的每个数字而不做任何事情,也需要几秒钟。您需要将成本限制在一个更合理的数字。

此外,您的最低成本 4 太小了。那只是16轮。它会使破解密码的方式比它应该的更容易。

为什么你甚至使用随机数?阅读本文以更好地选择成本。


查看完整回答
反对 回复 2022-05-23
  • 1 回答
  • 0 关注
  • 309 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号