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

C# 在SHA256之后转换为UTF8并形成UTF8会产生不同的结果,为什么?,c#,utf-8,sha256,C#,Utf 8,Sha256,在上面的示例中,hash和t具有不同的值。这是为什么?哈希不是UTF-8编码的字节数组,只是一些随机字节。注意:并非所有字节数组都作为UTF-8有效,UTF-8有自己的规则。因此,它不一定能被解码成字符串。(特别是,在.NET中,无效字节通常被解码为问号。) 您可以尝试常规的8位编码,它支持所有可能的字节数组,如ISO-8859-1。当然,当您试图将其作为字符串读取时,仍然会收到垃圾,但它应该可以来回工作 如果您试图将随机字节数组作为字符串传输,我建议您使用BASE-64编码,它将字节数组转换为

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

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

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


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

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

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


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

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

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


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

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

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


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

谢谢您的建议。那我就同意了!谢谢你的建议。那我就同意了!谢谢你的建议。那我就同意了!谢谢你的建议。那我就同意了!
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);