【问题标题】:werkzeug.security.check_password_hash takes too longwerkzeug.security.check_password_hash 耗时太长
【发布时间】:2017-07-28 14:25:02
【问题描述】:

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

【问题讨论】:

    标签: python flask werkzeug


    【解决方案1】:

    一开始我以为问题是因为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 次迭代。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-07
      • 2018-02-27
      • 2013-05-28
      • 2014-05-30
      • 2020-04-10
      相关资源
      最近更新 更多