你的'散列'輸出是一個base-64編碼的字符串。解碼字符串會產生一個20字節的摘要。 SHA-1產生20字節的哈希所以它看起來像的生成過程是:
base64(sha1(combine(salt, password)))
有兩個明顯的方法來組合所述鹽和密碼明文 - 追加或預先準備鹽的密碼。如果你在前面加上你結束了以下算法,鹽生成編碼摘要:
public static string GenPasswordString(string password, string salt)
{
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(salt + password);
using (var alg = new System.Security.Cryptography.SHA1Managed())
{
byte[] hashBytes = alg.ComputeHash(bytes);
return Convert.ToBase64String(hashBytes);
}
}
和
GenPasswordString("123456789", "ifWIg1IB") == "QkKtpxSqd+kIH2EuMkNdWV44B2g="
來源
2017-04-12 17:38:12
Lee
不整點密碼安全的,以防止你逆向工程呢? – buffjape
您將原始字符串的字節取出,然後以某種方式將它們與鹽的字節組合(取決於算法)。然後您對結果應用一次或多次散列函數。 –
@buffjape:我不認爲OP想知道原始密碼(因爲這是流行的哈希算法(接近)不可能),但想知道算法。但事實上,雖然混淆不夠安全,但這是人們可以採取的額外措施之一。 –