我应该使用哪种算法将密码散列到数据库中? [重复]

问题描述 投票:21回答:11

是否有[[anything可用而无法轻易破解?

security encryption passwords hash
11个回答
43
投票

此2008年的答案现在很危险地过时。

SHA(所有变体)现在都是易碎的,并且最佳实践是(截至2013年1月)使用密钥拉伸哈希(如PBKDF2)或理想情况下占用大量RAM的内存(例如Bcrypt),并且还要添加每位用户的盐。

32
投票
加密和密码存储的首要规则是“

不要自己发明],但是如果您必须在这里达到绝对最低要求,则必须采取某种安全措施:

基本规则:


16
投票
CodingHorror去年有a great article on this。本文末尾的建议是bcrypt.

上述算法是加密安全的哈希算法(但是,如今MD5不被认为是安全的。

但是,有专门为从密码派生密钥而创建的算法。这些是key derivation functions。它们设计用于对称密码,但也非常适合存储密码。例如,PBKDF2使用盐,大量迭代和良好的哈希函数。如果您有一个库,它是由什么实现的(例如.NET),我认为您应该考虑一下。


8
投票
上述算法是加密安全的哈希算法(但是,如今MD5不被认为是安全的。

6
投票
unique salt添加到哈希密码值(将盐值存储在数据库中)。当unique salt is used确实没有必要使用比SHA1或MD5更安全的算法的好处时(那是逐步的改进,而使用salt则是巨大的改进)。

6
投票
[使用像MD5或SHA1这样的强大的低温哈希函数,但请确保使用良好的salt,否则将容易受到rainbow table攻击。

5
投票

2013年1月更新


2
投票
MD5或SHA与每个条目随机生成的盐值组合

如前所述,这里不应该使用简单的哈希算法,这是原因:

http://arstechnica.com/security/2012/08/passwords-under-assault/

所以要使用诸如http://msdn.microsoft.com/en-us/library/system.security.cryptography.rfc2898derivebytes.aspx之类的其他东西>

所有哈希算法都容易受到“字典攻击”的攻击。这只是攻击者拥有非常大的可能密码字典的地方,并且它们会散列所有密码。然后,他们将查看其中的任何哈希是否与他们要解密的密码的哈希匹配。此技术可以轻松测试数百万个密码。这就是为什么您需要避免使用任何可远程预测的密码的原因。

但是,如果您愿意接受字典攻击的威胁,则MD5和SHA1都绰绰有余。 SHA1更安全,但是对于大多数应用程序来说,这确实不是一个重大改进。

MD5 / SHA1散列都是不错的选择。 MD5比SHA1稍弱。

1
投票
如前所述,这里不应该使用简单的哈希算法,这是原因:

http://arstechnica.com/security/2012/08/passwords-under-assault/


0
投票
所有哈希算法都容易受到“字典攻击”的攻击。这只是攻击者拥有非常大的可能密码字典的地方,并且它们会散列所有密码。然后,他们将查看其中的任何哈希是否与他们要解密的密码的哈希匹配。此技术可以轻松测试数百万个密码。这就是为什么您需要避免使用任何可远程预测的密码的原因。

-2
投票
MD5 / SHA1散列都是不错的选择。 MD5比SHA1稍弱。
© www.soinside.com 2019 - 2024. All rights reserved.