【发布时间】:2016-09-26 17:11:19
【问题描述】:
我对密码学很陌生,想了解散列算法。
我有以下来源来创建密码的哈希版本,可以存储在我的数据库中。
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);
}
我的示例用户是User1,密码为Password1,这将返回GVE/3J2k+3KkoF62aRdUjTyQ/5TVQZ4fI2PuqJ3+4d0= 的哈希版本
我的问题是:
- 这安全吗?
- 我应该在里面加盐吗?如果是这样,有人可以显示 我举个简单的例子,因为我不太明白盐是怎么回事 生成以便每次都匹配密码?
- 如果有人有这个 hashPasswordGenerator 方法,他们可以对我的密码进行反向工程吗?
提前致谢。
【问题讨论】:
-
在您的示例中,从未使用过
StringBuilder hash = new StringBuilder();。 -
Is SHA-1 secure for password storage? 的可能重复项(SHA-256 和 SHA-1 没有根本区别)
-
您永远不应该使用简单的散列函数来散列密码。您需要使用故意慢速散列函数,如 PBKDF2、bcrypt、scrypt 和 Argon2。查看更多:How to securely hash passwords?
标签: c# security hash cryptography sha256