我现在正在尝试找出为我的ASP.NET MVC 3应用程序散列密码的最佳方法.根据我的意见,最好使用给定的密码和随机盐,然后将散列密码和盐存储在一起.我的问题是不会使随机盐毫无意义吗?我的意思是散列密码的原因是因为如果有人进入你的数据库,他们没有普通的密码和盐使得反转哈希更难以获得密码但是如果我存储散列与密码,盐的重点是什么(我对哈希的知识是有限的所以我可以完全脱离我的想法).
我的第二个问题是什么散列方法是最好用的?我读到MD5(这是我一直使用的)很容易破解.我听说bcrypt/sha512非常好.应该使用哪一个?我知道C#默认带有sha512哈希.从我所看到的,bcrypt不包含在.NET库中,有没有适合C#和bcrypt的好库?
我正在使用C#并为字符串计算SHA1.我的问题是,这总是产生纯文本0-1和AZ吗?或者它也会产生具有特殊字符的东西?我的意思是ComputeHash函数在这里将返回纯文本?
SHA1CryptoServiceProvider sha1 = new SHA1CryptoServiceProvider();
string receivedValue = BitConverter.ToString(sha1.ComputeHash(to_be_hash)).Replace("-", "");
Run Code Online (Sandbox Code Playgroud)
不确定,但我认为它应该只有在转换为Base 64时才会生成特殊字符.
可能重复:
短字符串(标记名称)的最佳32位哈希函数是什么?
我需要将许多字符串哈希到32位(uint).
我可以使用MD5或SHA1并从中获取4个字节吗?还是有更好的选择吗?
如果一个人破裂等等,就没有必要保证安全或小心.我只需要快速和均匀地散列到32位.MD5和SHA1应该是统一的.
但是我可以使用更好(更快)的替代品吗?如果没有,你会使用哪一个?
这里有人问哪一个更好,而不是替代品,并有一个安全的事情(我不关心安全性):
?如何使用SHA1或MD5在C#中(其中一个是在性能和安全性进行验证更好)