check_password_hash
花费的时间比预期长得多。使用 Werkzeug 0.12 和 0.9 进行测试。下面的测试显示检查密码大约需要 2 秒。为什么要这么长时间?
该项目使用 GAE -google 应用引擎。并且部署在GAE上。不确定 GAE 是否有 werkzeug 库可以覆盖我已安装的库。我使用的是GAE SDK版本1.9.50
def verify_password(self, password):
logging.info(self.password_hash)
logging.info(str(datetime.now()))
result = check_password_hash(self.password_hash, password)
logging.info(str(datetime.now()))
return result
hash:pbkdf2:sha256:......................................
2017-07-28 13:52:14.904270
2017-07-28 13:52:17.041060
================== 编辑 1 =========== 好吧,看来我还没有完全清除我的库文件夹。我尝试了多次,从 Werkzeug==0.9.6 升级到 Werkzeug==0.12 解决了问题。降级到 0.9.6 又会出现问题。
这只解决了我机器上的问题。在 GAE 服务器上,延迟仍然存在。 =================编辑2============ 创建非常简约的项目后,我再次测试,在 GAE 上的行为是相同的。然后我看到在我的数据库中有两种类型的密码:一种是 sha1,另一种是 sha256。那些 sha1 的人也在 GAE 上快速工作。
最佳答案
一开始我以为问题是因为sha1和sha256的不同。然而,创建密码时使用的迭代次数会影响哈希时间。 http://werkzeug.pocoo.org/docs/0.12/utils/#werkzeug.security.generate_password_hash在某个时候,默认值从 1000 增加到 50000。
将迭代次数减少到 1000 次可以使散列速度更快,但代价是安全性降低。
generate_password_hash(password, method='pbkdf2:sha256:1000')
在数据库中,我有两种类型的密码,有些是在升级 Werkzeug 之前生成的,有些是在升级 Werkzeug 之后生成的。
pbkdf2:sha1:1000$.......
pbkdf2:sha256:50000$......
因此,由于 1000 次和 50000 次迭代,第一个和第二个之间的差异很大。
关于python - werkzeug.security.check_password_hash 花费的时间太长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45375935/