我正在学习当前在nodejs上下文中的传递哈希,我想知道你会推荐什么样的盐水平。默认级别为10,我想知道这对于少于10个用户的基本应用程序是否足够好。
答案 0 :(得分:0)
您拥有多少用户并不重要。有人可能会争辩说,如果你只有10个用户,那么每个用户拥有更多的资源来保证他们的安全。
对于有多少轮可以回答的问题,一个很好的答案就是回答一个问题 - 在不降低性能的情况下,你可以承受多少回合?
有时默认设置很好,但有时你可以做得更好。你必须自己测试它并测量它的影响。
答案 1 :(得分:0)
为了回答你的问题,我做了一个简单的测试 Pyhton 脚本:
#!/usr/bin/env python3
import bcrypt
import time
passwd = b's$cret12'
for i in range(4,17):
print(f'Rounds:{i}')
start = time.time()
salt = bcrypt.gensalt(rounds=i)
hashed = bcrypt.hashpw(passwd, salt)
end = time.time()
print(f'Rounds:{i} | Time: {end - start:.4f} s')
并在 Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz 上得到以下结果:
Rounds:4 | Time: 0.0016 s
Rounds:5 | Time: 0.0029 s
Rounds:6 | Time: 0.0060 s
Rounds:7 | Time: 0.0115 s
Rounds:8 | Time: 0.0232 s
Rounds:9 | Time: 0.0459 s
Rounds:10 | Time: 0.0907 s /* Good enough */
Rounds:11 | Time: 0.1834 s /* Worth to consider */
Rounds:12 | Time: 0.3563 s
Rounds:13 | Time: 0.7215 s
Rounds:14 | Time: 1.4437 s
Rounds:15 | Time: 2.9140 s
Rounds:16 | Time: 5.8405 s
因此,您可以考虑这些数字来了解根据常用词的哈希表检查 1 个密码需要多长时间。
今天,我会考虑每个密码 0.1 秒左右就足够了(如果您不允许用户使用像“123456”这样的简单密码)。因此,考虑 10 或 11 轮。