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.要使用的时候 ,就通过上面的解密方法 就可以任意操作啦