C# Unity中非对称加密的最大长度和消息太长错误
我使用的是来自的非对称加密,当我使用JsonUtility.ToJson()将保存数据的类转换为Json数据时,我能够使事情完美地工作,然后我使用上面链接中的加密 我曾经使用C#序列化程序,但遇到了问题,所以我被指示使用它,这很好,但当我用它更改一个保存系统时,我遇到了错误“Max Length is 117”,这让我觉得我在类中保存了太多(我有用于转换、精灵渲染器和碰撞R2D的变量)所以我在EncryptText()和DecryptText()中将keySize变量从1024增加到2048方法在非对称加密链接中,当我到达某个点时,看到了我所认为的工作原理,在这个点上,我有足够大的大小来保存抛出错误消息告诉我的数据 然后我到达了一个点,它说“加密异常:消息太长”,现在我想知道,“我该如何解决这个问题?”。这让我担心,如果我把它放在Unity Store的一个项目中,人们会遇到在一个场景中保存太多的问题(这是关于保存了4个游戏对象的lol…:()。即使我将保存的内容分为多个类并以这种方式保存,我觉得大小问题可能是一个红色警报 关于如何处理这种情况有什么想法吗 代码:C# Unity中非对称加密的最大长度和消息太长错误,c#,cryptography,encryption-asymmetric,C#,Cryptography,Encryption Asymmetric,我使用的是来自的非对称加密,当我使用JsonUtility.ToJson()将保存数据的类转换为Json数据时,我能够使事情完美地工作,然后我使用上面链接中的加密 我曾经使用C#序列化程序,但遇到了问题,所以我被指示使用它,这很好,但当我用它更改一个保存系统时,我遇到了错误“Max Length is 117”,这让我觉得我在类中保存了太多(我有用于转换、精灵渲染器和碰撞R2D的变量)所以我在EncryptText()和DecryptText()中将keySize变量从1024增加到2048方法
public class State_Manager : MonoBehaviour {
public void Save()
{
// IF we have nothing to save then don't save.
if(transformStateList.Count == 0){
return;
}
// Create a new State_Data.
State_Data data = new State_Data ();
// Loop the amount of the size of the List.
for(int i = 0; i < transformStateList.Count; i++){
// Create a new Object_Data struct.
Object_Data objectData = new Object_Data ();
// Store our data in our data structure.
objectData.StoreData(transformStateList[i]);
// Add it to the list.
data.objectData.Add (objectData);
}
// Turn the Store_Data into Json data.
string stateToJson = JsonUtility.ToJson(data);
// Encrypt the Json data.
string encryptedJson = AsymmetricEncryption.EncryptText (stateToJson, keySize, PlayerPrefs.GetString("PK"));
// Save the information.
PlayerPrefs.SetString("State", encryptedJson);
}
[System.Serializable]
class State_Data
{
public List<Object_Data> objectData = new List<Object_Data> ();
}
}
[Serializable]
public class Object_Data {
// Transform information.
public bool active;
public string name;
public int layer;
public float xPos;
public float yPos;
public float zPos;
// Sprite Renderer Information
public string spriteName = "";
public string sortLayerName = "";
public int sortLayerOrder = 0;
// Collider2D Information.
public bool isCollider = false;
public bool activeCollider;
public void StoreData(GameObject go){
// Save the activeness.
active = go.activeInHierarchy;
// Save the GameObjects name.
name = go.name;
// Save the GameObjects layer.
layer = go.layer;
// Save the GameObjects position.
xPos = go.transform.position.x;
yPos = go.transform.position.y;
zPos = go.transform.position.z;
// IF this GameObject has a sprite renderer,
// ELES it doesn't have a sprite renderer.
if (go.GetComponent<SpriteRenderer> () != null) {
// Save the sprite name, sorting layer name and the sorting layer order.
spriteName = go.GetComponent<SpriteRenderer> ().sprite.name;
sortLayerName = go.GetComponent<SpriteRenderer> ().sortingLayerName;
sortLayerOrder = go.GetComponent<SpriteRenderer> ().sortingOrder;
}
// IF there is a Collider2D attached,
// ELSE there is not a Collider2D attached.
if (go.GetComponent<Collider2D> () != null) {
isCollider = true;
activeCollider = go.GetComponent<Collider2D> ().enabled;
}
}
}
公共类状态管理器:单一行为{
公共作废保存()
{
//如果我们没有什么要保存的,那就不要保存。
if(transformStateList.Count==0){
返回;
}
//创建一个新的State\u数据。
State_Data Data=新State_Data();
//循环列表大小的数量。
for(int i=0;i
您不使用非对称加密来加密大量数据。如果您有大量数据,则通常使用对称加密,然后使用非对称加密来加密密钥
然而,这对你来说完全是小题大做。从代码的外观来看,你的播放器性能中似乎只有两个公钥和私钥字段,你只是在加密一个“状态”,稍后将读出。不要使用非对称加密,只需使用对称加密即可
如果您确实希望使用非对称加密,则需要执行加密:
您不使用非对称加密来加密大量数据。如果您有大量数据,则通常使用对称加密,然后使用非对称加密来加密密钥 然而,这对于您的目的来说是完全过分的。从代码的外观来看,您的播放器性能中似乎只有两个公钥和私钥字段,您只是在加密一个“状态”,稍后将读出。不要使用非对称加密