我正在将 byte[] 转换为字符串并返回。 转换回来的 byte[] 与原始的不一样。
如何正确地将字节转换为字符串并返回?
一个控制台应用程序来说明这一点: 程序.cs
_ = new TestByteConversion();
TestByteConversion.cs
internal class TestByteConversion
{
public TestByteConversion()
{
var aes = Aes.Create();
aes.GenerateKey();
var keyAsString = GetKeyAsString(aes.Key);
// I save it in a key value pair as string.
// I get the value as string from dictionary.
var keyAsyBytes = GetKeyFromString(keyAsString);
// USE NuGet ConsoleTables !
var table = new ConsoleTable("ID", "origin", "char", "new value");
for (var i = 0; i < keyAsString.Length; i++)
{
table.AddRow(i, aes.Key[i], keyAsString[i], keyAsyBytes[i]);
}
table.Write();
}
public static byte[] GetKeyFromString(string keyAsString)
{
return Encoding.ASCII.GetBytes(keyAsString);
}
public static string GetKeyAsString(byte[] byteArray)
{
return Encoding.ASCII.GetString(byteArray);
}
}
ASCIIEncoding.GetString
文档:
ASCIIEncoding 不提供错误检测。任何大于十六进制
的字节都会被解码为 Unicode 问号(“?”)。0x7F
并且
0x7F
为 127,而字节最多为 255,因此如果密钥有任何大于 0x7F
的字符,您最终将得到不可逆的转换。尝试改用 Convert.ToBase64String
/Convert.FromBase64String 方法(或 Convert.ToHexString
/Convert.FromHexString
)。