在 SHA256 产生不同结果后转换为 UTF 8 和从 UTF 8 转换,为什么?

Converted to and form UTF8 after SHA256 yields different results, why?

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);

在上面的例子中,hash和t有不同的值。这是为什么?

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

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

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