协议加密

根据上篇,如果我们通讯协议不进行加密,被人抓包后很容易解析出来,这个时候我们就需要对协议进行加密处理,协议传输本质上是传输的二进制字节流,我们可以考虑用一定的方式修改字节数据,最简单的方式是把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 然后对第一个数据进行解密,然后经过运算,计算出下一个密钥,对第二个数据进行解密即可

 

posted @ 2024-07-31 12:06  小包2017  阅读(55)  评论(0)    收藏  举报