check_password_hash花费的时间比预期的长得多。用Werkzeug 0.12和0.9测试。以下测试表明,检查密码大约需要2秒钟。为什么要花这么长时间?

该项目使用GAE -google app引擎。并将其部署在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之前生成的,有些是在升级之后生成的。

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


因此,第一个和第二个之间的差异很大,因为有1000到50000次迭代。

关于python - werkzeug.security.check_password_hash花费的时间太长,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45375935/

10-09 19:37