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); }
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); }
public XorPacketFilter(int seed = 36324016, int keyLength = 1024) { _xorKey = CryptXor.GenerateKey(seed, keyLength); }