为什么 bcrypt 库 CompareHashAndPassword 方法很慢?

A.k*_*mez 3 go bcrypt

我想比较密码并使用bcrypt库,但 CompareHashAndPassword 方法非常慢。为什么这个方法很慢?

var b  []byte =  []byte("1234")
 var bx  []byte =  []byte("$2a$14$RWV9NhWmlQmSoV9toM/k9OIzaNcYssCiauPVAljiX2NGhqvyxcOMy")
 fmt.Println("Start Compare: ", time.Now().Format("2006-01-02 15:04:05.000000"))
 err := bcrypt.CompareHashAndPassword(bx, b)
 fmt.Println("Completed Compare: ", time.Now().Format("2006-01-02 15:04:05.000000"))
 fmt.Println("------------------------")
Run Code Online (Sandbox Code Playgroud)

结果:

开始比较: 2018-03-22 22:53:09.142380

完成比较:2018-03-22 22:53:10.347585

你能帮助我吗?

Fli*_*mzy 7

缓慢是 bcrypt 的一个设计特点,因为如果它很快,就很容易暴力破解密码哈希。来自维基百科

除了加入盐来防止彩虹表攻击之外,bcrypt 也是一种自适应功能:随着时间的推移,迭代次数可以增加以使其变慢,因此即使计算能力不断增加,它仍然可以抵抗暴力搜索攻击。

  • 使用 bcrypt。它是专门为密码哈希设计的。 (5认同)
  • OP 询问是因为他想授权用户密码。我也因为同样的原因来到这里。如果授权用户密码需要10秒,那么我的加载时间就很慢了。那么,如果用户因为登录时间过长而离开我的网站,那么授权用户有什么意义呢?OP 所询问的(从他的评论来看)是是否有更好的授权方式以及他做错了什么,或者他是否应该使用另一个库。我也是:D (2认同)