我对密码学相当陌生,并且想要让我的头部围绕哈希算法。散列算法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);
}
我的例子用户User1
与密码Password1
,这将返回的GVE/3J2k+3KkoF62aRdUjTyQ/5TVQZ4fI2PuqJ3+4d0=
我的问题哈希版本是:
- 这是安全的?
- 我应该为此添加盐吗?如果是的话,有人可以显示我 一个简单的例子,因为我真的不明白它是如何生成的,以便它每次都能匹配密码?
- 如果有人有这个hashPasswordGenerator方法可以逆向工程我的密码?
在此先感谢。
在你的例子'StringBuilder hash = new StringBuilder();'从不使用。 – Ashigore
[SHA-1安全用于密码存储?](http://stackoverflow.com/questions/2772014/is-sha-1-secure-for-password-storage)(SHA-256和SHA-1没有根本的区别) –
你不应该使用简单的散列函数来散列密码。您需要使用像PBKDF2,bcrypt,scrypt和Argon2这样的特意缓慢的散列函数。查看更多:[如何安全地哈希密码?](http://security.stackexchange.com/q/211/45523) –