Unity 工具类 之 简单的数据加密解密类 DataEncryptionAndDecryptionManager 实现

Unity 工具类 之 简单的数据加密解密类 DataEncryptionAndDecryptionManager 实现

Unity 工具类 之 简单的数据加密解密类 DataEncryptionAndDecryptionManager 实现

目录


一、简单介绍

Unity 工具类,自己整理的一些游戏开发可能用到的模块,单独独立使用,方便游戏开发。

简单的数据加密解密类,单独做了一个单例类,提供数据加密解密的接口,供外界调用即可。

MD5的全称是message-digest algorithm 5(信息-摘要算法,在90年代初由mit laboratory for computer science和rsa data security inc的ronald l. rivest开发出来, 经md2、md3和md4发展而来。

MD5具有很好的安全性(因为它具有不可逆的特征,加过密的密文经过解密后和加密前的东东相同的可能性极小)

二、实现原理

1、单例类,保证整个场景中只有一个类管理数据加密解密;

2、使用 RijndaelManaged 进行相关加密解密;

3、使用 DataEncryptionAndDecryptionManager.Instance.ConductEncryption 即可加密数据;

4、使用 DataEncryptionAndDecryptionManager.Instance.ConductDecryption 即可解密数据;

三、注意事项

1、加密解密的key为32位数值,根据自己需要设定;

四、效果预览

www.zeeklog.com  - Unity 工具类 之 简单的数据加密解密类 DataEncryptionAndDecryptionManager 实现

五、实现步骤

1、打开Unity,新建空工程,在场景中添加 UI,用于输入加密内容,显示加密内容和解密后的结果,如下图

www.zeeklog.com  - Unity 工具类 之 简单的数据加密解密类 DataEncryptionAndDecryptionManager 实现

2、在工程中添加脚本,单例类保证类唯一,数据加密解密管理类为加密解密逻辑,测试脚本按下 E 键加密,按下 D 键解密,如下图

www.zeeklog.com  - Unity 工具类 之 简单的数据加密解密类 DataEncryptionAndDecryptionManager 实现

3、把测试脚本挂载到场景中,并对应赋值,如下图

www.zeeklog.com  - Unity 工具类 之 简单的数据加密解密类 DataEncryptionAndDecryptionManager 实现

4、运行场景,效果如下

www.zeeklog.com  - Unity 工具类 之 简单的数据加密解密类 DataEncryptionAndDecryptionManager 实现

六、关键代码

1、TestScript

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class TestScript : MonoBehaviour
{

    public InputField Content_InputField;
    public Text Encryption_Text;
    public Text Decryption_Text;

    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.E)) {

            Encryption_Text.text = 
            DataEncryptionAndDecryptionManager.Instance.ConductEncryption(Content_InputField.text,
                DataEncryptionAndDecryptionManager.Instance.KeyValue
                );
        }

        if (Input.GetKeyDown(KeyCode.D))
        {
            Decryption_Text.text =
            DataEncryptionAndDecryptionManager.Instance.ConductDecryption(Encryption_Text.text,
                DataEncryptionAndDecryptionManager.Instance.KeyValue
                );
        }
    }
}

2、DataEncryptionAndDecryptionManager

using System;
using System.Collections;
using System.Collections.Generic;
using System.Security.Cryptography;
using System.Text;
using UnityEngine;

public class DataEncryptionAndDecryptionManager : Singleton<DataEncryptionAndDecryptionManager>
{

    /// <summary>
    /// 32位任意数值,作为是加密解码约定数字(可以根据需要修改成自己想要的32位任意数值)
    /// </summary>
    private string _keyValue = "01234567890123456789012345678901";

    public string KeyValue { get => _keyValue; set => _keyValue = value; }

    /// <summary>
    /// 数据加密
    /// </summary>
    /// <param name="content">需要加密内容</param>
    /// <param name="keyValue">加密的32位密码</param>
    /// <returns></returns>
    public string ConductEncryption(string content, string keyValue)
    {
        byte[] keyArray = UTF8Encoding.UTF8.GetBytes(keyValue);

        //加密格式
        RijndaelManaged encryption = new RijndaelManaged();
        encryption.Key = keyArray;
        encryption.Mode = CipherMode.ECB;
        encryption.Padding = PaddingMode.PKCS7;

        //生成加密锁
        ICryptoTransform cTransform = encryption.CreateEncryptor();
        byte[] _EncryptArray = UTF8Encoding.UTF8.GetBytes(content);
        byte[] resultArray = cTransform.TransformFinalBlock(_EncryptArray, 0, _EncryptArray.Length);
        return Convert.ToBase64String(resultArray, 0, resultArray.Length);
    }

    /// <summary>
    /// 数据解密
    /// </summary>
    /// <param name="content">需要解密的数据</param>
    /// <param name="keyValue">解密的32位密码</param>
    /// <returns></returns>
    public string ConductDecryption(string content, string keyValue)
    {
        byte[] keyArray = UTF8Encoding.UTF8.GetBytes(keyValue);

        // 解密格式
        RijndaelManaged decryption = new RijndaelManaged();
        decryption.Key = keyArray;
        decryption.Mode = CipherMode.ECB;
        decryption.Padding = PaddingMode.PKCS7;

        // 开始解密
        ICryptoTransform cTransform = decryption.CreateDecryptor();
        byte[] _DecryptArray = Convert.FromBase64String(content);
        byte[] resultArray = cTransform.TransformFinalBlock(_DecryptArray, 0, _DecryptArray.Length);
        return UTF8Encoding.UTF8.GetString(resultArray);
    }



}

3、Singleton

public abstract class Singleton<T> where T : class, new()
{
    private static T instance = null;

    // 多线程安全机制
    private static readonly object locker = new object();

    public static T Instance
    {
        get
        {
            lock (locker)
            {
                if (instance == null)
                    instance = new T();
                return instance;
            }
        }
    }
}

七、参考工程