我现在正在尝试找出为我的ASP.NET MVC 3应用程序散列密码的最佳方法.根据我的意见,最好使用给定的密码和随机盐,然后将散列密码和盐存储在一起.我的问题是不会使随机盐毫无意义吗?我的意思是散列密码的原因是因为如果有人进入你的数据库,他们就没有普通的密码,并且盐使得反转哈希以获取密码要困难得多,但是如果我将哈希存储在密码,盐的重点是什么(我对哈希的知识是有限的,所以我可以完全脱离我的想法).
我的第二个问题是什么散列方法是最好用的?我读到MD5(这是我一直使用的)很容易破解.我听说bcrypt / sha512非常好.应该使用哪一个?我知道C#默认带有sha512哈希.从我所看到的,bcrypt不包含在.NET库中,有没有适合C#和bcrypt的好库?
解决方法
没有必要将盐存放在不同的位置,你应该总是假设攻击者知道盐,它的目的不是一个额外的密码!
在.NET中,这个API将完成你需要的一切,它会在每次AES加密通过之前创建大加密随机盐以及HMACSHA512散列和通过字节交换进行密钥扩展:)