在SHA256之后转换为并形成UTF8会产生不同的结果,为什么


var test = "sdfsdfsdfasfwerqwer";
var q = UTF8Encoding.UTF8.GetBytes(test);
var sha256 = SHA256.Create();
var hash = sha256.ComputeHash(q);
var z = UTF8Encoding.UTF8.GetString(hash);
var t = UTF8Encoding.UTF8.GetBytes(z);

在上面的示例中,哈希和 t 具有不同的值。这是为什么呢?

hash不是UTF-8编码的字节数组,只是一些随机字节。注意:并非所有字节数组都有效为 UTF-8,UTF-8 有自己的规则。因此,它不一定被解码为字符串。(具体而言,无效字节通常在 .NET 中解码为问号。

您可以尝试支持所有可能的字节数组的常规 8 位编码,例如 ISO-8859-1。当然,当您尝试将其读取为字符串时,您仍然会得到垃圾,但它应该来回工作。

如果您尝试将随机字节数组作为字符串传输,我建议您使用 BASE-64 编码,它将字节数组转换为 ASCII 字符串,这在所有情况下都应该是安全的。

最新更新