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上快速工作。
答案 0 :(得分:2)
一开始我认为问题是由于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次迭代。