Exemplo n.º 1
0
        public NetPacket Encode(NetPacket packet)
        {
            // 패킷에 데이터가 남아있지 않으면 새로 할당하자
            packet = CheckAndResizePacket(packet, 1);

            int headerSize = packet.GetHeaderSize();

            byte[] data = packet.RawData;
            int    size = packet.Size;

            // 체크섬값 초기화
            data[size - 1] = InitChecksumValue;

            // 체크섬값을 마지막에 넣자
            data[size - 1] = GetChecksum(data, headerSize, size - headerSize);

            // xor
            CryptXor.Crypt(data, headerSize, size - headerSize, _xorKey);

            return(packet);
        }
Exemplo n.º 2
0
        public NetPacket Decode(NetPacket packet)
        {
            int headerSize = packet.GetHeaderSize();
            int size       = packet.Size;

            byte[] data = packet.RawData;

            // xor
            CryptXor.Crypt(data, headerSize, size - headerSize, _xorKey);

            // checksum
            byte checksum = GetChecksum(data, headerSize, size - headerSize);

            if (InitChecksumValue != checksum)
            {
                throw new Exception($"Not match packet checksum [{packet.Property}]");
            }

            packet.Size -= 1;

            return(packet);
        }
Exemplo n.º 3
0
 public XorPacketFilter(int seed = 36324016, int keyLength = 1024)
 {
     _xorKey = CryptXor.GenerateKey(seed, keyLength);
 }