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有不同的值。这是为什么?
答案 0 :(得分:3)
hash
不是UTF-8编码的字节数组,只是一些随机字节。注意:并非所有字节数组都是UTF-8有效,UTF-8有自己的规则。因此,它不一定能被解码成字符串。 (具体而言,无效字节通常在.NET中被解码为问号。)
您可以尝试常规的8位编码,它支持所有可能的字节数组,如ISO-8859-1。当然,当你尝试将其作为一个字符串读取时,你仍然会得到垃圾,但它应该来回工作。
如果您尝试将随机字节数组作为字符串传输,我建议您使用BASE-64编码,它将字节数组转换为ASCII字符串,这在任何情况下都应该是安全的。