Unity存储信息加密

 unity保存关键数据的的方法和解析方法

using Newtonsoft.Json;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using UnityEngine.Networking;

public class UserData
{
    public int id;
}
public class Test : MonoBehaviour
{
    // 随便选取一些用于亦或的字符(看自己喜欢:注意保密)
    public static char[] keyChars = { 'a', 'b', 'c', 'd', 'e' };
    // 加密
    public static string Encrypt(string data)
    {
        char[] dataChars = data.ToCharArray();
        for (int i = 0; i < dataChars.Length; i++)
        {
            char dataChar = dataChars[i];
            char keyChar = keyChars[i % keyChars.Length];
            // 重点:通过亦或得到新的字符
            char newChar = (char)(dataChar ^ keyChar);
            dataChars[i] = newChar;
        }
        return new string(dataChars);
    }

    // 解密
    public static string Decrypt(string data)
    {
        // 两次亦或执行的是同样的操作
        return Encrypt(data);
    }

    // 修改:存数据的时候进行第一次亦或
    public static void SaveUserData(UserData userData)
    {
        // ...
        string jsonData = JsonConvert.SerializeObject(userData);
        jsonData = Encrypt(jsonData);
        File.WriteAllText(Application.dataPath + "/file.txt",jsonData);
        // ...
    }

    // 修改:存数据的时候进行第二次亦或(复原数据)
    public static UserData LoadUserData(string userName)
    {
        // ...
        if (File.Exists(userName))
        {
            string jsonData = File.ReadAllText(userName);
            jsonData = Decrypt(jsonData);
            UserData userData = JsonConvert.DeserializeObject(jsonData);
            return userData;
            // ...
        }
        return null;
        // ...
    }

    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            UserData userData = new UserData();
            userData.id = 9878754;
            SaveUserData(userData);
        }
        if (Input.GetKeyDown(KeyCode.S))
        {
            LoadUserData(Application.dataPath + "/file.txt");
        }
    }
}

你可能感兴趣的:(unity,游戏引擎)