【发布时间】:2019-09-13 13:37:08
【问题描述】:
我正在使用以下代码来执行 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。
有什么问题?较短的输出长度会影响安全性吗?
【问题讨论】:
-
作为一种猜测 - 看起来你正在将其转换为 Base64 字符串而不是标准的十六进制字符串 - 这会给出不同的长度。
-
SHA256 会给你 32 个字节的哈希值。使用 Base64 编码可以得到大约 44 个字符。正如@origin 所说,如果您将每个字节表示为其十六进制值(2 个字符),那么您将获得 64 个字符。
-
是的,我认为它是正确的。我已将每个字节转换为 X2 格式的字符串,长度为 64。