根据上篇,如果我们通讯协议不进行加密,被人抓包后很容易解析出来,这个时候我们就需要对协议进行加密处理,协议传输本质上是传输的二进制字节流,我们可以考虑用一定的方式修改字节数据,最简单的方式是把0改成1,把1改成0,也就是直接取反,这也是一种加密方式,虽然比较容易被破解,意义不大,
我们可以考虑如下加密方式
public static void EncryptData(byte[] data, byte key, int startIndex) { for (int i = startIndex, length = data.Length; i < length; i++) { data[i] ^= key; key = GetNextRandomKey(key); } } static int key1 = 32423432; static int key2 = 4652123; static int key3 = 253; public static byte GetNextRandomKey(byte key) { int nextKey = key * key1 % key2 % key3; return (byte)nextKey; }
key1,key2,key3是服务器和客户端确定统一的
加密方式是原始数据异或密钥即可
因为 任何一个数据异或密钥之后的数据也就是加密数据,加密数据再次异或密钥即可得到原始数据,因此我们只需要记录初始密钥,通讯的时候需要把初始密钥和协议data一起发送给对方,对方收到初始密钥后,根据相同的密码key1,keyi2,key3 可以计算出下一个密钥,对数据进行解密处理
EncryptData方法是加密解密方法,我们收到一条数据,只需要在数据中拿到初始密钥key 然后对第一个数据进行解密,然后经过运算,计算出下一个密钥,对第二个数据进行解密即可
标签:协议,加密,int,static,密钥,key,byte From: https://www.cnblogs.com/xiaobao2017/p/18334352