예제 #1
0
        private bool StartEncrypt()
        {
            CryptoHandler crypto = new CryptoHandler();

            List <byte> encryptionRequest = new List <byte>();
            string      serverID          = "";

            if (protocol.protocolVersion < MCVersion.MC172Version)
            {
                serverID = "lilium-pre";
            }
            encryptionRequest.AddRange(getString(serverID));
            encryptionRequest.AddRange(getArray(crypto.getPublic()));
            byte[] token = new byte[4];
            var    rng   = new System.Security.Cryptography.RNGCryptoServiceProvider(); rng.GetBytes(token);

            encryptionRequest.AddRange(getArray(token));
            SendPacket(0x01, encryptionRequest);

            List <byte> encryptResponse = new List <byte>(readDataRAW(readNextVarIntRAW()));

            if (readNextVarInt(encryptResponse) == 0x01)
            {
                List <byte> dec = new List <byte>();
                dec.AddRange(crypto.Decrypt(readNextByteArray(encryptResponse)));
                dec.RemoveRange(0, dec.Count - 16);
                byte[] key_dec   = dec.ToArray();
                byte[] token_dec = token;

                EncStream      = CryptoHandler.getAesStream(Client.GetStream(), key_dec);
                this.encrypted = true;
                return(true);
            }
            return(false);
        }