您的位置:首页 > 移动开发 > Unity3D

unity3d 数据加/解密

2015-05-25 17:14 791 查看
现如今 手游是个很火的时代,对于做游戏的来说,这是个很好的发展趋势,

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

如何去保护?

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

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

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


本帖隐藏的内容

[C#] 纯文本查看 复制代码
<span style="font-family:黑体;word-wrap:break-word"></span>using System.Collections;<br style="word-wrap:break-word" />
using System.Text;<br style="word-wrap:break-word" />
using System.Security.Cryptography;<br style="word-wrap:break-word" />
using System;<br style="word-wrap:break-word" /><span style="font-family:黑体;word-wrap:break-word"><br style="word-wrap:break-word" />
public class ADDJIEMI : MonoBehaviour </span><span style="font-family:黑体;word-wrap:break-word">{<br style="word-wrap:break-word" />
public UIInput _input;<br style="word-wrap:break-word" />
//获取输入框的值<br style="word-wrap:break-word" />
private string inputText;<br style="word-wrap:break-word" />
//被加密内容<br style="word-wrap:break-word" />
private string strEncryption;<br style="word-wrap:break-word" />
private string strkeyValue;<br style="word-wrap:break-word" />
void Start()<br style="word-wrap:break-word" />
{<br style="word-wrap:break-word" />
//加密和解密采用相同的key,可以任意数字,但是必须为32位<br style="word-wrap:break-word" />
strkeyValue = "12345678901234567890198915689039";<br style="word-wrap:break-word" />
}<br style="word-wrap:break-word" />
public void encryptionClick()<br style="word-wrap:break-word" />
{<br style="word-wrap:break-word" />
inputText = _input.value;<br style="word-wrap:break-word" />
strEncryption=encryptionContent(inputText, strkeyValue);<br style="word-wrap:break-word" />
Debug.Log(strEncryption);<br style="word-wrap:break-word" />
}<br style="word-wrap:break-word" />
public void decipherClick()<br style="word-wrap:break-word" />
{<br style="word-wrap:break-word" />
inputText = decipheringContent(strEncryption, strkeyValue);<br style="word-wrap:break-word" />
Debug.Log(inputText);<br style="word-wrap:break-word" />
}<br style="word-wrap:break-word" />
/// <summary><br style="word-wrap:break-word" />
/// 内容加密<br style="word-wrap:break-word" />
/// </summary><br style="word-wrap:break-word" />
/// <param name="ContentInfo">要加密内容</param><br style="word-wrap:break-word" />
/// <param name="strkey">key值</param><br style="word-wrap:break-word" />
/// <returns></returns><br style="word-wrap:break-word" />
public string encryptionContent(string ContentInfo,string strkey)<br style="word-wrap:break-word" />
{<br style="word-wrap:break-word" />
byte[] keyArray = UTF8Encoding.UTF8.GetBytes(strkey);<br style="word-wrap:break-word" />
RijndaelManaged encryption = new RijndaelManaged();<br style="word-wrap:break-word" />
encryption.Key = keyArray;<br style="word-wrap:break-word" />
encryption.Mode = CipherMode.ECB;<br style="word-wrap:break-word" />
encryption.Padding = PaddingMode.PKCS7;<br style="word-wrap:break-word" />
ICryptoTransform cTransform = encryption.CreateEncryptor();<br style="word-wrap:break-word" />
byte[] _EncryptArray = UTF8Encoding.UTF8.GetBytes(ContentInfo);<br style="word-wrap:break-word" />
byte[] resultArray = cTransform.TransformFinalBlock(_EncryptArray, 0, _EncryptArray.Length);<br style="word-wrap:break-word" />
return Convert.ToBase64String(resultArray, 0, resultArray.Length);<br style="word-wrap:break-word" />
}<br style="word-wrap:break-word" />
<br style="word-wrap:break-word" />
/// <summary><br style="word-wrap:break-word" />
/// 内容解密<br style="word-wrap:break-word" />
/// </summary><br style="word-wrap:break-word" />
/// <param name="encryptionContent">被加密内容</param><br style="word-wrap:break-word" />
/// <param name="strkey">key值</param><br style="word-wrap:break-word" />
/// <returns></returns><br style="word-wrap:break-word" />
public string decipheringContent(string encryptionContent,string strkey)<br style="word-wrap:break-word" />
{<br style="word-wrap:break-word" />
byte[] keyArray = UTF8Encoding.UTF8.GetBytes(strkey);<br style="word-wrap:break-word" />
RijndaelManaged decipher = new RijndaelManaged();<br style="word-wrap:break-word" />
decipher.Key = keyArray;<br style="word-wrap:break-word" />
decipher.Mode = CipherMode.ECB;<br style="word-wrap:break-word" />
decipher.Padding = PaddingMode.PKCS7;<br style="word-wrap:break-word" />
ICryptoTransform cTransform = decipher.CreateDecryptor();<br style="word-wrap:break-word" />
byte[] _EncryptArray = Convert.FromBase64String(encryptionContent);<br style="word-wrap:break-word" />
byte[] resultArray = cTransform.TransformFinalBlock(_EncryptArray, 0, _EncryptArray.Length);<br style="word-wrap:break-word" />
return UTF8Encoding.UTF8.GetString(resultArray);<br style="word-wrap:break-word" />
}<br style="word-wrap:break-word" />
}<br style="word-wrap:break-word" />
</span>


使用:

ngui创建一个input(输入框) 加2个button(按钮),

直接把代码拖到输入框对象上,

然后分别拖input对象给2个按钮绑定事件就可以了。

注:ngui其实不建议使用直接拖动绑定事件,

最好使用Event代码做事件,

由于我只是测试,所以就直接拖啦

以后有时间的话 我会发一篇如何使用ngui的event代码做事件 在此就不详述了


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

直接运行看效果,

点击加密后的结果



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

再看点击解密后的结果



2[}73SNWBXHWI%O$B4~})WH.jpg(50.84 KB, 下载次数: 6)

下载附件 保存到相册

2014-8-22 10:56 上传

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

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

比如:对xml加/解密

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

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

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

是不是既方便又安全啊 ,是的话就点个”赞“呗!

还有 服务器与客户端数据交互的时候 也可以使用哟 至少我是这样用的 哈哈哈

好啦 ,上面就是我对数据保护的方法,如果大家还有更好的方式,求赐教
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: