示例#1
0
 public void GetHeader(out NetHeader header)
 {
     header.code     = buffer[0];
     header.length   = (ushort)(buffer[1] + (buffer[2] << 8));
     header.randKey  = buffer[3];
     header.checkSum = buffer[4];
 }
示例#2
0
        public bool Decryption(NetHeader header)
        {
            if (header.code != Protocol.PACKET_CODE)
            {
                MessageBox.Show("복호화 에러: 패킷 코드 에러");
                return(false);
            }

            int  offset     = Protocol.SizeOfNetHeader;
            int  packetSize = UseSize;
            byte randKey    = header.randKey;

            byte temp1;
            byte temp2;

            temp1 = (byte)(header.checkSum ^ (FIXED_KEY + 1));
            temp2 = temp1;

            byte decodeCheckSum = (byte)(temp1 ^ (byte)(randKey + 1));
            byte checkSum       = 0;
            byte predata;

            temp1          = (byte)(buffer[offset] ^ (byte)(FIXED_KEY + 2 + header.checkSum));
            predata        = buffer[offset];
            buffer[offset] = (byte)(temp1 ^ (byte)(temp2 + randKey + 2));
            temp2          = temp1;
            checkSum      += buffer[offset];

            for (int i = 1; i < packetSize; i++)
            {
                temp1   = (byte)(buffer[offset + i] ^ (byte)(FIXED_KEY + (i + 2) + predata));
                predata = buffer[offset + i];

                buffer[offset + i] = (byte)(temp1 ^ (byte)(temp2 + randKey + (i + 2)));
                temp2     = temp1;
                checkSum += buffer[offset + i];
            }

            if (checkSum != decodeCheckSum)
            {
                MessageBox.Show("복호화 에러: 체크섬 에러 / checkSum :" + checkSum + "/ decode : " + decodeCheckSum);
                return(false);
            }


            return(true);
        }