我使用以下代码执行SHA256。
public static string GenerateSaltedHash(string plainTextString, string saltString)
{
byte[] salt = Encoding.UTF8.GetBytes(saltString);
byte[] plainText = Encoding.UTF8.GetBytes(plainTextString);
HashAlgorithm algorithm = new SHA256Managed();
byte[] plainTextWithSaltBytes =
new byte[plainText.Length + salt.Length];
for (int i = 0; i < plainText.Length; i++)
{
plainTextWithSaltBytes[i] = plainText[i];
}
for (int i = 0; i < salt.Length; i++)
{
plainTextWithSaltBytes[plainText.Length + i] = salt[i];
}
byte[] bytes = algorithm.ComputeHash(plainTextWithSaltBytes);
return Convert.ToBase64String(algorithm.ComputeHash(plainTextWithSaltBytes));
}
当我使用SHA256时,预期结果长度为64.但是我得到了44的结果。 有什么问题? 44长度输出会影响安全质量吗?
答案 0 :(得分:7)
Base-64每个字符6位(2 ^ 6 = 64)。
256 bits / 6 bits per char = 42.6666 char
由于填充,显然最终为44(您将在输出的末尾看到一个或两个=
。)
你必须期望base-16(AKA十六进制),每个字符4位(2 ^ 4 = 16)。
256 bits / 4 bits per char = 64 char
对于十六进制使用this:
return BitConverter.ToString(bytes).Replace("-", string.Empty);