Rijndael算法替代密码散列

时间:2016-06-20 03:51:56

标签: c# algorithm security encryption hash

当我选择密码加密时,我发现Rijndael算法是无法通过暴力攻击破解的最佳加密算法之一。

所以我为用户的密码加密选择了Rijndael算法。

现在我已经确定,哈希(不可逆)比加密更安全(可逆)[如果我错了请纠正我]

我的问题是,

  1. 我可以使用现有的实现Rijndael算法
  2. 如果我不应该加密,哪一个应该是最好的哈希算法。
  3. 我在实施Rijndael算法时提到了以下网站。

    http://msdn.microsoft.com/en-us/library/system.security.cryptography.rijndael(v=vs.110).aspx

    How to generate Rijndael KEY and IV using a passphrase?

    http://www.obviex.com/samples/encryption.aspx

2 个答案:

答案 0 :(得分:4)

OWASP列出了一些good practices for password storage

您基本上应用protection_function将凭据转换为受保护的表单: [protected form] = [salt] + protect([protection func], [salt] + [credential]);

您还添加了一个盐,因此同一凭据的两个版本具有不同的存储形式。

他们还列出了您应该选择散列函数的顺序(是的,散列比加密更好,因此即使是网站所有者也无法对密码进行逆向工程)。 Argon2和PBKDF通常是protection_function的好选择。

阅读本指南的其余部分。另外this related Security SE post关于为什么AES(即Rijndael)加密密码存储比甚至不那么强大的哈希(@ Salvador的评论)更糟糕。

答案 1 :(得分:3)

加密问题是,当攻击者获得密钥时,他可以立即解密数据库的所有密码,因此知道可以在其他网站上尝试的原始密码。

由于散列是不可逆的(无法取回原始密码),攻击者无法使用散列,即使他可以控制服务器。该网站的所有者也是如此。

今天推荐的算法是BCrypt,PBKDF2和SCrypt,它们都有一个控制计算单个哈希所需时间的成本因子。它需要的时间越长,蛮力就越难。