除了 bcrypt 之外,您会推荐我在 Python3 中使用哪些可以生成随机盐的哈希算法?

What hashing algorithms would you recommend I use in Python3 that can generate a random salt, other than bcrypt?

我在使用 bcrypt 时遇到的问题是无法将模块导入 iOS 上的 Pythonista 应用程序,这是我需要 运行 我的脚本的地方。您还会推荐什么类似于 bcrypt 的东西,它可以生成随机盐,并且内置了类似 checkpw() 函数的东西来快速验证加盐密码?

如果 pbkdf2 本身可用,我会在尝试推出您自己的 bcrypt 之前使用它。当它的工作因数足够大时,当 bcrypt 或 scrypt 不可用时它仍然是一个可靠的选择,并且直接使用它比尝试手动重新创建其他东西更安全。

不了解您的用例的更多信息,一般建议:使用 pbkdf2 进行足够多的轮数,以占用目标设备处理器吞吐量上限的大约半秒。这使 UX 保持在可容忍的等待时间内,同时仍然对离线攻击提供合理的抵抗力。

我还建议在一定范围内(比如一千次)稍微随机化轮数。例如,如果您将 200,000 定为可接受的 500 毫秒延迟,我会随机选择一个介于 200,000 到 202,000 之间的值(或类似的值)——确保大多数用户将有不同轮次所需的任何值(假设所有用户密码可能会聚合到一个可能被泄露和哈希值被盗的位置)。这是因为一些较新的“关联”/“相关”攻击只有在散列集的所有成本因素都相同时才能很好地应对大量散列集。

从长远来看,还要确保您的代码很容易接受轮数的可变下限和上限,因此您可以选择随着处理器的进步而随着时间的推移增加轮数。 (您甚至可以幻想并根据创建密码的处理器动态计算轮次范围,这样它就可以在未来准备就绪,无需任何额外干预。)