CSharpRTMP.Core.Protocols.Rtmfp.AESEngine.Decrypt C# (CSharp) Method

Decrypt() public method

public Decrypt ( BufferWithOffset encryptArray ) : void
encryptArray CSharpRTMP.Common.BufferWithOffset
return void
        public void Decrypt(BufferWithOffset encryptArray)
        {
            int len = encryptArray.Length;
            int turn = 0;
            int start = 0, end;
            Array.Clear(_iv, 0, _iv.Length);
            while (len >= AES_BLOCK_SIZE)
            {
                start = AES_BLOCK_SIZE*turn;
                //end = AES_BLOCK_SIZE*turn + 15;
                Buffer.BlockCopy(encryptArray.Buffer, encryptArray.Offset + start, tmp, 0, AES_BLOCK_SIZE);
                Decrypt16Byte(encryptArray, start, _key);

                for (int n = 0; n < AES_BLOCK_SIZE; ++n)
                {
                    encryptArray[start + n] ^= _iv[n];
                    //_iv[n] = encryptArray[start + n];
                }
                Buffer.BlockCopy(tmp, 0, _iv, 0, AES_BLOCK_SIZE);
                //for (int n = 0; n < AES_BLOCK_SIZE; ++n)
                //    iv[n] = encryptArray[start + n];

                len -= AES_BLOCK_SIZE;
                turn++;
            }
            
            if (len > 0)
            {
                start += AES_BLOCK_SIZE*turn;
                Decrypt16Byte(encryptArray, start, _key); //==temp 只有16个字节 (已经处理了)

                for (int n = 0; n < len; ++n)
                    encryptArray[start + n]  ^= _iv[n];
                //for (int n = 0; n < AES_BLOCK_SIZE; ++n)
                //    iv[n] = encryptArray[start + n];
            }
     
            //memcpy(ivec,iv,AES_BLOCK_SIZE);
        }