Sam*_*ron 32
使用至少128位或更长的安全随机盐来填充哈希值,以避免彩虹攻击并使用BCrypt,PBKDF2或scrypt.PBKDF2获得NIST批准.
引用:Archive.org:http://chargen.matasano.com/chargen/2007/9/7/enough-with-the-rainbow-tables-what-you-need-to-know-about-s.html
问题是MD5很快.它的现代竞争对手也是如此,例如SHA1和SHA256.速度是现代安全散列的设计目标,因为散列几乎是每个密码系统的构建块,并且通常在每个数据包或每个消息的基础上执行需求.
速度正是您在密码散列函数中不想要的.
快速密码验证功能是一个问题,因为它们可以使用暴力攻击.使用上面的所有算法,您可以控制"慢度"
我可以推荐BCrypt.net.非常容易使用,您可以调整进行散列所需的时间,这太棒了!
// Pass a logRounds parameter to GenerateSalt to explicitly specify the
// amount of resources required to check the password. The work factor
// increases exponentially, so each increment is twice as much work. If
// omitted, a default of 10 is used.
string hashed = BCrypt.HashPassword(password, BCrypt.GenerateSalt(12));
// Check the password.
bool matches = BCrypt.CheckPassword(candidate, hashed);
Run Code Online (Sandbox Code Playgroud)
对于具有大量密码的服务器端实现,您绝对应该使用像bcrypt这样的可调整迭代方法.这篇关于该主题的着名文章仍然(大部分)相关:
http://www.securityfocus.com/blogs/262
对于独立应用程序中的单个密码,存储位置可能已经由系统自己的身份验证系统保护,我认为它不那么重要.单个强哈希可能已经足够好了,添加盐很容易,没有理由不这样做.