werkzeug.security.check_password_hash需要太长时间

4

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

1个回答

7
起初,我认为问题是由于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之前生成的,另一些是在升级之后生成的。

pbkdf2:sha1:1000$.......
pbkdf2:sha256:50000$......

因为第一个和第二个之间的迭代次数差异很大,分别为1000和50000次,所以它们之间的差异也非常大。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接