python - werkzeug.security.check_password_hash 花费的时间太长

标签 python flask werkzeug

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 上快速工作。

最佳答案

一开始我以为问题是因为s​​ha1和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/

相关文章:

python - 如何在不使用pip的情况下安装pythonwheel?

python - Flask WTForms 表单未提交但未输出验证错误

python - 使用 Flask wtforms 和 GET 方法提交表单

flask - 在Flask WSGI请求/响应包装器中记录响应主体

python - 在 Flask Debug模式下禁用默认/控制台路由的最佳方法是什么?

python - 在 python 中使用 Selenium、PhantomJS 和 Tor

python - 在 Jupyter Notebook 中使用 pyplot.scatter() 会导致 Jupyter Notebook 菜单出现错误

python - 使用另一个文件中的函数通过 xlsx 写入 Excel

python - Flask-Bokeh-Gunicorn : Models must be owned by a single document

python - Werkzeug 响应太慢