use*_*707 5 c# security hash cryptography sha256
我对密码学很陌生,想了解哈希算法。
我有以下来源来创建密码的哈希版本,该密码可以存储在我的数据库中。
public static string hashPasswordGenerator(string password)
{
System.Security.Cryptography.SHA256Managed crypt = new System.Security.Cryptography.SHA256Managed();
StringBuilder hash = new StringBuilder();
byte[] cry = crypt.ComputeHash(Encoding.UTF8.GetBytes(password), 0, Encoding.UTF8.GetByteCount(password));
return Convert.ToBase64String(cry);
}
Run Code Online (Sandbox Code Playgroud)
我的示例用户User1使用密码Password1,这返回哈希版本GVE/3J2k+3KkoF62aRdUjTyQ/5TVQZ4fI2PuqJ3+4d0=
我的问题是:
- 这安全吗?
- 我应该加盐吗?如果是这样,有人可以给我看一个简单的例子,因为我真的不明白它是如何生成盐的,以便它每次都会匹配密码?
- 如果有人有这个 hashPasswordGenerator 方法,他们可以对我的密码进行逆向工程吗?
提前致谢。
这安全吗?
如果您只是使用不带盐的 SHA2,则并非如此。(并不是说 SHA2 可以轻易逆转)
我应该加盐吗?
是的。
如果是这样,有人可以给我看一个简单的例子吗
RNGCryptoServiceProvider rngCsp = new RNGCryptoServiceProvider();
var salt = new byte[32];
rngCsp.GetBytes(salt); // this will fill the buffer with random values
Run Code Online (Sandbox Code Playgroud)
因为我不太明白它是如何生成盐的,以便它每次都会匹配密码
您必须将盐(对于每个密码来说必须是唯一的)与散列(密码+盐)一起保存。
如果有人有这种
hashPasswordGenerator方法,他们可以对我的密码进行逆向工程吗?
是的,如果它是字典密码并且您不使用盐。否则就不行(在可预见的未来),因为哈希值应该很难逆转。
顺便说一句,您应该考虑使用PBKDF2来满足您的密码哈希需求,而不是尝试重新发明轮子,因为它的工作因素可以减慢暴力攻击(迭代次数)。
| 归档时间: |
|
| 查看次数: |
2559 次 |
| 最近记录: |