您好,欢迎来到Unity之家!   unity.jb51.net 
  • 首 页
  • 你问我答
  • 当前位置:首页 > 学习培训 > Unity编程 >
    unity3d 数据加/解密
    时间:2015-04-21 09:33 来源:Unity之家 作者:unity.jb51.net 浏览:收藏 挑错 推荐 打印


    在网上看到一篇关于数据加密的文章。借此分给大家


    现如今 手游是个很火的时代,对于做游戏的来说,这是个很好的发展趋势,

    可是现在我们程序不单仅仅完成游戏功能就可以了,还要学会保护好自己的游戏数据内容。

    如何去保护?

    相信每一位程序都有自己独特的见解。

    因此,我在此分享下自己对数据加/解密的处理方式。


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


    using System.Collections;
    
    using System.Text;
    
    using System.Security.Cryptography;
    
    using System;
    
    
    public class ADDJIEMI : MonoBehaviour
    {
    
        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代码做事件  在此就不详述了


    里面代码非常简洁,同时也有注释 相信大家都能看懂吧!

    直接运行看效果,

    点击加密后的结果



    unity3d 数据加/解密


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

    再看点击解密后的结果


    unity3d 数据加/解密


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


    其实,上面方法不仅仅适用于简单字符串加/解密,仔细想想,对文本、xml等之类的文件内容 也是可行的哟!

    比如:对xml加/解密

    1.读取xml文件,获取返回一个string 的xml内容

    2.然后通过我上面的方法 对该 内容进行一次包裹,这样在内存中就是一段乱码,别人想改都不可能的,嘿嘿

    3.要使用的时候 ,就通过上面的解密方法 就可以任意操作啦


    (责任编辑:脚印)
    免责声明:Unity之家部分内容来源于互联网,如有侵权,请联系我们,本站将立即进行处理。
    标签:Unity之家