Unity3d 使用 RSA和DES 加密网络数据包

来源:互联网 发布:j2直播软件 编辑:程序博客网 时间:2024/06/06 20:37

在同事的指导下,明白了网络加密的缘由以及手法。


在网络通讯中,如果数据不进行加密,那么这些数据都是透明的 。

就相当于你去寄信,但是这封信居然没有用信封装起来,这样邮局的任何一个人都可以拿过来看信的内容,毫无安全性可言。

电脑中发送出去的每个数据包,都要在交换机 路由器上通过。

如果你发送一个登陆网站的请求,而这个请求没有加密,那么在路由器上能明明白白的看到你的帐号密码。

最简单的测试方式:在电脑上安装WireShark,然后让手机连上电脑发出去的Wifi,在WireShark中能看到手机发送的所有数据。


现有的加密分为 对称加密和非堆成加密。

对称加密:客户端和服务端 使用相同的密钥,加密速度很快,比如 DES 。

非对称加密:客户端和服务端使用 不相同的密钥,加密速度非常慢。比如 RSA 。

转自http://blog.csdn.net/huutu http://www.thisisgame.com.cn

一般项目中的加密流程如下



C#库 中为我们提供了RSA和DES加密的API,下面分别来看。


/************************** * 文件名:UEncrypt.cs; * 文件描述:RSA加密 解密; * 创建日期:2016/05/29; * Author:ThisisGame; * Page:https://github.com/ThisisGame/UEncrypt.git ***************************/using System.IO;using System.Text;using System.Security.Cryptography;namespace ThisisGame.UEncrypt{    public class UEncrypt    {        /// <summary>        /// 生成RSA私钥 公钥        /// </summary>        /// <param name="privateKey"></param>        /// <param name="publicKey"></param>        public static void RSAGenerateKey(ref string privateKey, ref string publicKey)        {            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();            privateKey = rsa.ToXmlString(true);            publicKey = rsa.ToXmlString(false);        }        /// <summary>        /// 用RSA公钥 加密        /// </summary>        /// <param name="data"></param>        /// <param name="publicKey"></param>        /// <returns></returns>        public static byte[] RSAEncrypt(byte[] data, string publicKey)        {            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();            rsa.FromXmlString(publicKey);            byte[] encryptData = rsa.Encrypt(data, false);            return encryptData;        }        /// <summary>        /// 用RSA私钥 解密        /// </summary>        /// <param name="data"></param>        /// <param name="privateKey"></param>        /// <returns></returns>        public static byte[] RSADecrypt(byte[] data, string privateKey)        {            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();            rsa.FromXmlString(privateKey);            byte[] decryptData = rsa.Decrypt(data, false);            return decryptData;        }        /// <summary>        /// DES加密        /// </summary>        /// <param name="data">源数据</param>        /// <param name="desrgbKey"></param>        /// <param name="desrgbIV"></param>        /// <returns></returns>        public static byte[] DESEncrypt(byte[] data,byte[] desrgbKey,byte[] desrgbIV)        {            DESCryptoServiceProvider des = new DESCryptoServiceProvider();            MemoryStream memoryStream = new MemoryStream();            CryptoStream cryptoStream = new CryptoStream(memoryStream, des.CreateEncryptor(desrgbKey, desrgbIV), CryptoStreamMode.Write);            cryptoStream.Write(data, 0, data.Length);            cryptoStream.FlushFinalBlock();            return memoryStream.ToArray();        }        /// <summary>        /// DES解密        /// </summary>        /// <param name="data">源数据</param>        /// <param name="desrgbKey"></param>        /// <param name="desrgbIV"></param>        /// <returns></returns>        public static byte[] DESDecrypt(byte[] data, byte[] desrgbKey, byte[] desrgbIV)        {            DESCryptoServiceProvider des = new DESCryptoServiceProvider();            MemoryStream memoryStream = new MemoryStream();            CryptoStream cryptoStream = new CryptoStream(memoryStream, des.CreateDecryptor(desrgbKey, desrgbIV), CryptoStreamMode.Write);            cryptoStream.Write(data, 0, data.Length);            cryptoStream.FlushFinalBlock();            return memoryStream.ToArray();        }    }}



测试工程下载:

https://github.com/ThisisGame/UEncrypt


 可怜

Github 求Star

0 0
原创粉丝点击