建议的哈希算法用于存储密码是什么?

His*_*air 18 encryption passwords hash

鉴于MD5的已知弱点以及SHA1中讨论的最近(2009年5月)的弱点,新程序应该如何腌制和散列密码?

我见过SHA-256和SHA-512.

主要在Ruby on Rails中编程并使用PostgreSQL - 但其他语言和环境可能还需要计算密码哈希值.

Eli*_*sky 21

SHA-256和SHA-512在可预见的未来是安全的.他们属于SHA-2家族,到目前为止尚未发现任何攻击.这个维基百科页面说,Unix和Linux厂商现在正在转向SHA-2,以便对密码进行安全散列.SHA-3系列具有更强大的算法,正在开发中,但至少要到2012年才能完成.

PS:除非你隐藏了来自政府的秘密特工名称,否则你对SHA-1也是安全的,但如果实施SHA-2没问题,那就改用它.

  • PKCS#5(http://www.rsa.com/rsalabs/node.asp?id=2127)讨论了读者可能想要考虑的一些其他好的信息(如迭代). (2认同)
  • SHA-1被认为已损坏. (2认同)

小智 17

使用像bcrypt这样的慢速函数.是来自Phusion人的帖子.


Mic*_*SFT 8

您应该使用基于密码的密钥派生函数作为uid/pwd结果; 最知名的是PBKDF2 http://en.wikipedia.org/wiki/PBKDF2,也定义为RFC 2898 http://tools.ietf.org/html/rfc2898.PKBDF2获取您的秘密数据以及盐和迭代计数.这是解决问题的标准方法.

如果您使用.NET编程,请使用Rfc2898DeriveBytes http://msdn.microsoft.com/en-us/library/system.security.cryptography.rfc2898derivebytes.aspx

  • 我刚刚阅读了 100 篇关于该主题的文章和问题,并且似乎同意 RFC2898 或任何其他多次迭代解决方案(例如 BCrypt)是可行的方法。但 Rfc2898DeriveBytes 是基于 SHA-1 的,不是吗?不会显得过时吗?BCrypt 似乎并没有“经过验证”,尽管它看起来很棒。另外,Rfc2898DeriveBytes 没有实现 IDisposable,看起来它很容易泄露内存中的明文密码。我的实际需求并不那么偏执,但我想衡量每件事的安全程度。您对此有何看法?谢谢! (2认同)