Aegis.Network.SecurePacket.Decrypt C# (CSharp) Method

Decrypt() public method

public Decrypt ( string iv, string key ) : bool
iv string
key string
return bool
        public virtual bool Decrypt(string iv, string key)
        {
            ushort packetSize = Size;

            //  Block Size가 일치하지 않으면 복호화를 할 수 없다.
            if ((packetSize - 2) % 16 != 0)
            {
                Logger.Err(LogMask.Aegis, "BlockSize is not match(packetsize={0}).", packetSize);
                return false;
            }

            //  Decrypt AES
            {
                using (Aes aes = Aes.Create())
                using (MemoryStream memoryStream = new MemoryStream())
                {
                    aes.Mode = CipherMode.CBC;
                    aes.Padding = PaddingMode.None;
                    aes.KeySize = 128;
                    aes.BlockSize = 128;
                    aes.Key = Encoding.ASCII.GetBytes(key);
                    aes.IV = Encoding.ASCII.GetBytes(iv);

                    using (CryptoStream cryptoStream = new CryptoStream(memoryStream, aes.CreateDecryptor(), CryptoStreamMode.Write))
                    {
                        cryptoStream.Write(Buffer, 2, packetSize - 2);
                        byte[] decrypted = memoryStream.ToArray();
                        Overwrite(decrypted, 0, decrypted.Length, 2);

                        cryptoStream.Close();
                    }

                    memoryStream.Close();
                }
            }

            //  Check CRC
            {
                uint crc = GetCRC32(Buffer, 2, packetSize - 4 - 2);
                uint packetCRC = BitConverter.ToUInt32(Buffer, packetSize - 4);

                if (crc != packetCRC)
                {
                    Logger.Err(LogMask.Aegis, "Invalid CRC.");
                    return false;
                }
            }

            return true;
        }