public void Encrypt(BufferWithOffset inArray)
{
int len = inArray.Length;
//byte[] outArray = new byte[len%16 == 0 ? len : (len/16 + 1)*16];
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;
for (int n = 0; n < AES_BLOCK_SIZE; n++)
{
//outArray[start + n] = (byte)(inArray[start + n] ^ _iv[n]);
inArray[start + n] ^= _iv[n];
}
Encrypt16Byte(inArray.Buffer, start + inArray.Offset, _key);
Buffer.BlockCopy(inArray.Buffer, start + inArray.Offset, _iv, 0, AES_BLOCK_SIZE);
//for (int i = 0; i < AES_BLOCK_SIZE; i++)
// _iv[i] = outArray[start + i];
len -= AES_BLOCK_SIZE;
turn++;
}
if (len > 0)
{
start = AES_BLOCK_SIZE*turn;
for (int n = 0; n < len; ++n) inArray[start + n] ^= _iv[n];
//outArray[start + n] = (byte)(inArray[start + n] ^ _iv[n]);
for (int n = len; n < AES_BLOCK_SIZE; ++n)
inArray[start + n] = _iv[n];
//outArray[start + n] = _iv[n];
Encrypt16Byte( inArray.Buffer, start + inArray.Offset, _key);
/////////////////
//var myTemp = Compute(outArray);
/////////////////
//for (int i = 0; i < AES_BLOCK_SIZE; i++)
// iv[i] = outArray[start + i]; //==? 是 start + 1 还是 start + i
}
//memcpy(ivec,iv,AES_BLOCK_SIZE);
//Buffer.BlockCopy(outArray,0,inArray.Buffer,inArray.Offset,outArray.Length);
}