对于大多数面向公众的服务,在用户开始生气之前,您通常可以让登录时间超过 250 毫秒 - 400 毫秒。
那么,如果我们认为登录尝试对数据库有一个调用,并且它使用带有非阻塞调用的MongoDB ,那么登录/注册rounds
的最佳价值是什么。(使用Mongotor,并使用电子邮件作为,因此默认情况下它是索引的,查询速度很快:0.00299978256226并且当然使用具有3条记录的数据库进行了测试......)_id
import passlib.hash
import time
hashh = passlib.hash.pbkdf2_sha512
beg1 = time.time()
password = hashh.encrypt("test", salt_size = 32, rounds = 12000)
print time.time()- beg1 # returns 0.142999887466
beg2 = time.time()
hashh.verify("test", password) # returns 0.143000125885
print time.time()- beg2
现在如果我使用半值:
password = hashh.encrypt("test", salt_size = 32, rounds = 4000) # returns 0.0720000267029
hashh.verify("test", password) # returns 0.0709998607635
我在戴尔 XPS 15 i7 2.0 Ghz 上使用Windows 7 64 位
注意:安装了bcrypt,当然,直接使用它作为默认值(rounds = 12
)真的很痛苦:
hashh = passlib.hash.bcrypt
beg1 = time.time()
password = hashh.encrypt("test", rounds = 12) # returns 0.406000137329
print time.time()- beg1
beg2 = time.time()
hashh.verify("test", password) # returns 0.40499997139
print time.time()- beg2
半值:
password = hashh.encrypt("test", rounds = 12) # 0.00699996948242 wonderful?
hashh.verify("test", password) # 0.00600004196167
你能建议我在使用时pbkdf2_sha512
对生产有好处吗?