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); }