当我选择密码加密时,我发现Rijndael算法是无法通过暴力攻击破解的最佳加密算法之一。
所以我为用户的密码加密选择了Rijndael算法。
现在我已经确定,哈希(不可逆)比加密更安全(可逆)[如果我错了请纠正我]
我的问题是,
我在实施Rijndael算法时提到了以下网站。
http://msdn.microsoft.com/en-us/library/system.security.cryptography.rijndael(v=vs.110).aspx
答案 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,它们都有一个控制计算单个哈希所需时间的成本因子。它需要的时间越长,蛮力就越难。