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