将编码的byte []转换为可打印的字符串

时间:2013-06-07 19:22:18

标签: encryption encoding unity3d aes rijndael

我使用C#的Rijndael AES加密编码字符串。我生成一个密钥和一个IV,并使用它们来编码我可以保存到磁盘的字符串和值(我正在使用Unity3D的playerprefs)。

我面临的问题是PlayerPrefs键和值需要是有效的字符序列,编码的字节不一定有效。

因此,在使用我的密钥和IV对我的字符串进行编码后,我得到一个可以用Unicode编码的字节数组,但是(有时)当我尝试保存它时,我收到一条错误消息:

byte[] encryptedBytes = Encode("someText", encryptionKey, initVector);
string encodedString = Encoding.Unicode.GetString(encryptedBytes);
PlayerPrefs.SetString("SecretData",encodedString);
PlayerPrefs.Save();

错误:

  

在-1073752512处无效的utf-16序列(缺少代理尾部)

是否有任何方法可以确保字符串格式有效?

1 个答案:

答案 0 :(得分:2)

encrypt函数返回的字节与random无法区分,可能不包含有效的字符编码。要将结果转换为字符串(如果需要),您可以使用base 64。