我想:
我尝试了一些解决方案,例如question中的解决方案。
由于某种原因,初始和最终字节数组不匹配。以下是使用的代码:
using (RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider())
{
byte[] originalArray = new byte[32];
rng.GetBytes(key);
string temp_inBase64 = Convert.ToBase64String(originalArray);
byte[] temp_backToBytes = Encoding.UTF8.GetBytes(temp_inBase64);
}
我的问题是:
为什么“originalArray”和“temp_backToBytes”不匹配? (originalArray的长度为32,temp_backToBytes的长度为44,但它们的值也不同)
是否可以来回转换,如果是这样,我该如何做到这一点?
答案 0 :(得分:41)
编码数组长约四分之一的原因是base-64编码只使用每个字节中的六位;这就是它存在的原因 - 以适合通过仅ASCII通道(如电子邮件)进行交换的方式对任意数据进行编码,可能使用零和其他不可打印的字符。
恢复原始阵列的方法是使用Convert.FromBase64String
:
byte[] temp_backToBytes = Convert.FromBase64String(temp_inBase64);