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

时间:2015-01-25 10:15:19

标签: c# utf-8 sha256

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有不同的值。这是为什么?

1 个答案:

答案 0 :(得分:3)

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

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

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