• unity3d 数据加/解密


    http://www.manew.com/thread-21682-1-1.html

    http://www.manew.com/thread-21682-1-1.html

    现如今 手游是个很火的时代,对于做游戏的来说,这是个很好的发展趋势,
    可是现在我们程序不单仅仅完成游戏功能就可以了,还要学会保护好自己的游戏数据内容。
    如何去保护?
    相信每一位程序都有自己独特的见解。
    因此,我在此分享下自己对数据加/解密的处理方式。

    好了 话不多说直接上代码:

    [/font]using System.Collections;
    using System.Text;
    using System.Security.Cryptography;
    using System;
    [font=黑体]//
    //                  _ooOoo_
    //                 o8888888o
    //                 88" . "88
    //                 (| -_- |)
    //                 O  =  /O
    //              ____/`---'\____
    //            .'  \|     |//  `.
    //          /  \|||  :  |||//  
    //          /  _||||| -:- |||||-  
    //          |   | \  -  /// |   |
    //          | \_|  ''---/''  |   |
    //            .-\__  `-`  ___/-. /
    //        ___`. .'  /--.--  `. . __
    //     ."" '<  `.___\_<|>_/___.'  >'"".
    //    | | :  `- \`.;` _ /`;.`/ - ` : | |
    //       `-.   \_ __ /__ _/   .-` /  /
    //=====`-.____`-.___\_____/___.-`____.-'======
    //                  `=---='
    //
    //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    //          佛祖保佑       永无Bug
    //          快加工资       不改需求
    //
    public class ADDJIEMI : MonoBehaviour [/font][font=黑体]{
    public UIInput _input;
    //获取输入框的值
    private string inputText;
    //被加密内容
    private string strEncryption;
    private string strkeyValue;
    void Start()
    {
    //加密和解密采用相同的key,可以任意数字,但是必须为32位
    strkeyValue = "12345678901234567890198915689039";
    }
    public void encryptionClick()
    {
    inputText = _input.value;
    strEncryption=encryptionContent(inputText, strkeyValue);
    Debug.Log(strEncryption);
    }
    public void decipherClick()
    {
    inputText = decipheringContent(strEncryption, strkeyValue);
    Debug.Log(inputText);
    }
    /// <summary>
    /// 内容加密
    /// </summary>
    /// <param name="ContentInfo">要加密内容</param>
    /// <param name="strkey">key值</param>
    /// <returns></returns>
    public string encryptionContent(string ContentInfo,string strkey)
    {
    byte[] keyArray = UTF8Encoding.UTF8.GetBytes(strkey);
    RijndaelManaged encryption = new RijndaelManaged();
    encryption.Key = keyArray;
    encryption.Mode = CipherMode.ECB;
    encryption.Padding = PaddingMode.PKCS7;
    ICryptoTransform cTransform = encryption.CreateEncryptor();
    byte[] _EncryptArray = UTF8Encoding.UTF8.GetBytes(ContentInfo);
    byte[] resultArray = cTransform.TransformFinalBlock(_EncryptArray, 0, _EncryptArray.Length);
    return Convert.ToBase64String(resultArray, 0, resultArray.Length);
    }
     
    /// <summary>
    /// 内容解密
    /// </summary>
    /// <param name="encryptionContent">被加密内容</param>
    /// <param name="strkey">key值</param>
    /// <returns></returns>
    public string decipheringContent(string encryptionContent,string strkey)
    {
    byte[] keyArray = UTF8Encoding.UTF8.GetBytes(strkey);
    RijndaelManaged decipher = new RijndaelManaged();
    decipher.Key = keyArray;
    decipher.Mode = CipherMode.ECB;
    decipher.Padding = PaddingMode.PKCS7;
    ICryptoTransform cTransform = decipher.CreateDecryptor();
    byte[] _EncryptArray = Convert.FromBase64String(encryptionContent);
    byte[] resultArray = cTransform.TransformFinalBlock(_EncryptArray, 0, _EncryptArray.Length);
    return UTF8Encoding.UTF8.GetString(resultArray);
    }
    }

    使用:
    ngui创建一个input(输入框) 加2个button(按钮),
    直接把代码拖到输入框对象上,
    然后分别拖input对象给2个按钮绑定事件就可以了。

    注:ngui其实不建议使用直接拖动绑定事件,
    最好使用Event代码做事件,
    由于我只是测试,所以就直接拖啦
    以后有时间的话 我会发一篇如何使用ngui的event代码做事件  在此就不详述了

    里面代码非常简洁,同时也有注释 相信大家都能看懂吧!
    直接运行看效果,
    点击加密后的结果

     
    通过调用上面加密方法,就把我们的数据内容加密成乱码了哟。

    再看点击解密后的结果
     

    这样就把刚才生成的乱码,通过解密方法,还原了哟。


    其实,上面方法不仅仅适用于简单字符串加/解密,仔细想想,对文本、xml等之类的文件内容 也是可行的哟!
    比如:对xml加/解密
    1.读取xml文件,获取返回一个string 的xml内容
    2.然后通过我上面的方法 对该 内容进行一次包裹,这样在内存中就是一段乱码,别人想改都不可能的,嘿嘿
    3.要使用的时候 ,就通过上面的解密方法 就可以任意操作啦

  • 相关阅读:
    【C++】虚函数
    ZF-net
    bzoj1061【NOI2008】志愿者招募
    highcharts 绘制图标的JAVASCRIPT 类库 收藏
    C语言中的const,free使用方法具体解释
    Java Transaction Management
    从有序数组中查找某个值 low_bound
    [华为机试练习题]35.找零钱
    1.9算法入门之进制转换
    uboot移植rtc
  • 原文地址:https://www.cnblogs.com/ye-ming/p/7985194.html
Copyright © 2020-2023  润新知