我對密碼學相當陌生,並且想要讓我的頭部圍繞哈希算法。散列算法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) –