【问题标题】:Algorithm for one way password encryption单向密码加密算法
【发布时间】:2011-10-18 04:51:42
【问题描述】:

加密密码的最安全的单向加密算法是什么?

MD5 和 SHA (1..512) 经常使用,但它们的设计目的是提高速度,这对于防止对加密密码的暴力攻击是不利的。

算法不应该太奇特,以便它可以与常见的编程语言/运行时一起使用,如 Java、.NET 或 Python。

【问题讨论】:

  • 无论用什么方法,都需要好盐。我认为 SHA 已经足够好了,在密码这样的小数据集上,哈希方法不会那么重要。
  • 注意:MD5 和 SHA 是不是加密算法,而是hash算法。已知 IIRC 至少 MD5 容易受到字典攻击。
  • 这实际上是之前关于 security.SE 的问题的副本:security.stackexchange.com/q/4789/485 - 我建议迁移并关闭为副本。
  • @Thorsten:任何哈希算法都几乎同样容易受到字典攻击(字典基于密码选择,而不是正确的哈希算法)。对 MD5 的冲突攻击会影响某些用途(例如,数字签名),但不会影响密码。同时,碰撞攻击的存在表明存在足够的弱点,通常最好避免使用 MD5(可能除了在没有攻击者的情况下验证文件传输之类的事情)。
  • “单向加密”称为“哈希”。投赞成票只是因为任何其他寻找正确术语的人都会被帮助找到它。

标签: security encryption hash passwords password-protection


【解决方案1】:

BCryptSCrypt。为什么?因为它们的设计目的是慢而不是快。

另请参阅:How to securely hash passwords?security.stackexchange.com

【解决方案2】:

单独的哈希不会拯救你,这可以在关于该主题的其他帖子中阅读。

bcrypt 和 scrypt 确实是不错的选择,但大多数语言不支持开箱即用。尽管找到支持它们的库确实不应该是一个问题。除了这两个之外,您还可以使用PKCS#5 中所述的基于密码的加密 (PBE),最好使用 PBKDF2。几乎任何地方都应该内置对 PBE 的支持。

【讨论】:

【解决方案3】: