我想比较密码并使用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("------------------------")
结果:
开始比较:2018 - 03 - 22 22:53:09.142380
完成的比较:2018 - 03 - 22 22:53:10.347585
你能帮我吗?
2条答案
按热度按时间zzoitvuj1#
慢是bcrypt的一个设计特性,因为如果它很快,就很容易暴力破解密码哈希。Wikipedia:
除了加入一个salt来防止rainbow table攻击之外,bcrypt还是一个自适应函数:随着时间的推移,迭代次数可以增加以使其更慢,因此即使在计算能力增加的情况下,它仍然可以抵抗蛮力搜索攻击。
2izufjch2#
在开发和测试时,我降低了bcrypt的成本,使它运行得更快
例如:
与我通常的成本值14相比,那条线运行得非常快
所以,当你比较的时候,bcrypt会读取你的哈希值并进行计算。
在您的示例中,我看到您使用cost14来生成该散列
也许降低成本对你来说也会起作用。