А это уже проблема в чтении. Как и раньше, может прилететь несколько пакетов в одном, и например, если там было 2 пакета подряд, вы их декрипнули как один, тогда у второго уже данные будут неверными.
while (received >= 6)
{
int length = BitConverter.ToUInt16(buffer, 0) & 0x7FFF;
byte[] temp = new byte[length + 2];
Buffer.BlockCopy(buffer, 2, temp, 0, temp.Length);
BitwiseHelper.Unshift(temp, bits);
packetQueue.Enqueue(new ReceivePacketFrame(this, temp));
received -= length + 4;
Buffer.BlockCopy(buffer, length + 4, buffer, 0, received); // << Копируем оставшиеся данные в начало буфера
}
Code: C#