|
现如今 手游是个很火的时代,对于做游戏的来说,这是个很好的发展趋势,
可是现在我们程序不单仅仅完成游戏功能就可以了,还要学会保护好自己的游戏数据内容。
如何去保护?
相信每一位程序都有自己独特的见解。
因此,我在此分享下自己对数据加/解密的处理方式。
好了 话不多说直接上代码:
- [/font]using System.Collections;
- using System.Text;
- using System.Security.Cryptography;
- using System;
- [font=黑体]//
- // _ooOoo_
- // o8888888o
- // 88" . "88
- // (| -_- |)
- // O\ = /O
- // ____/`---'\____
- // .' \\| |// `.
- // / \\||| : |||// \
- // / _||||| -:- |||||- \
- // | | \\\ - /// | |
- // | \_| ''\---/'' | |
- // \ .-\__ `-` ___/-. /
- // ___`. .' /--.--\ `. . __
- // ."" '< `.___\_<|>_/___.' >'"".
- // | | : `- \`.;`\ _ /`;.`/ - ` : | |
- // \ \ `-. \_ __\ /__ _/ .-` / /
- //[/align]=====`-.____`-.___\_____/___.-`____.-'======
- // `=---='
- //
- //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- // 佛祖保佑 永无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="strkeykey值</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="strkeykey值</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代码做事件 在此就不详述了undefined
里面代码非常简洁,同时也有注释 相信大家都能看懂吧!
直接运行看效果,
点击加密后的结果
通过调用上面加密方法,就把我们的数据内容加密成乱码了哟。
再看点击解密后的结果
这样就把刚才生成的乱码,通过解密方法,还原了哟。
其实,上面方法不仅仅适用于简单字符串加/解密,仔细想想,对文本、xml等之类的文件内容 也是可行的哟!
比如:对xml加/解密
1.读取xml文件,获取返回一个string 的xml内容
2.然后通过我上面的方法 对该 内容进行一次包裹,这样在内存中就是一段乱码,别人想改都不可能的,嘿嘿
3.要使用的时候 ,就通过上面的解密方法 就可以任意操作啦
是不是既方便又安全啊 ,是的话就点个”赞“呗!
还有 服务器与客户端数据交互的时候 也可以使用哟 至少我是这样用的 哈哈哈
好啦 ,上面就是我对数据保护的方法,如果大家还有更好的方式,求赐教
|
|