无法将字节数组编码为UTF8,然后将其解码回字节

时间:2015-09-17 23:30:14

标签: c# utf-8

我正在尝试将字节数组转换为字符串,然后稍后将这些字符串转换回字节数组,但是我得到了一些不一致的结果。

var salt = System.Text.Encoding.UTF8.GetString(encryptedPassword.Salt);
var key = System.Text.Encoding.UTF8.GetString(encryptedPassword.Key);
...
var saltBytes = System.Text.Encoding.UTF8.GetBytes(salt);
var keyBytes = System.Text.Encoding.UTF8.GetBytes(key);

在这种情况下,原始盐和键都是字节[20],但新的不相等(salt是一个字节[36],键一个字节[41],两者的值完全不同)。 / p>

1 个答案:

答案 0 :(得分:2)

基本上是@DourHighArch所说的。您可以使用string-> binary->字符串,但您不能期望能够使用文本编码转换为binary-> string->二进制文件。

对于你正在做的事情,你可能想要使用类似base64编码的东西。所以你可以这样写:

var salt = Convert.ToBase64String(encryptedPassword.Salt);
var key = Convert.ToBase64String(encryptedPassword.Key);
...
var saltBytes = Convert.FromBase64String(salt);
var keyBytes = Convert.FromBase64String(key);