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<UserData>(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");
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值