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

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


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

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

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

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

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


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

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

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

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

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

Unity3d 使用 RSA和DES 加密网络数据包_第1张图片



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
    {
        /// 
        /// 生成RSA私钥 公钥
        /// 
        /// 
        /// 
        public static void RSAGenerateKey(ref string privateKey, ref string publicKey)
        {
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
            privateKey = rsa.ToXmlString(true);
            publicKey = rsa.ToXmlString(false);
        }

        /// 
        /// 用RSA公钥 加密
        /// 
        /// 
        /// 
        /// 
        public static byte[] RSAEncrypt(byte[] data, string publicKey)
        {
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
            rsa.FromXmlString(publicKey);

            byte[] encryptData = rsa.Encrypt(data, false);

            return encryptData;
        }


        /// 
        /// 用RSA私钥 解密
        /// 
        /// 
        /// 
        /// 
        public static byte[] RSADecrypt(byte[] data, string privateKey)
        {
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
            rsa.FromXmlString(privateKey);
            byte[] decryptData = rsa.Decrypt(data, false);
            return decryptData;
        }

        /// 
        /// DES加密
        /// 
        /// 源数据
        /// 
        /// 
        /// 
        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();
        }

        /// 
        /// DES解密
        /// 
        /// 源数据
        /// 
        /// 
        /// 
        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

你可能感兴趣的:(Unity)