我使用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序列(缺少代理尾部)
是否有任何方法可以确保字符串格式有效?
答案 0 :(得分:2)
encrypt函数返回的字节与random无法区分,可能不包含有效的字符编码。要将结果转换为字符串(如果需要),您可以使用base 64。