から16以上のバイトだから私は1622バイトの長さで[]バイトを持っているが、私はそれをすべてを復号化したいが、AESは、128ビットの唯一のブロックサイズを持って復号化することができます。 イムは、私はこの例外を取得する16バイトのブロックにそれを分割しようとした場合: System.Security.Cryptography.CryptographicException 追加情報:入力バッファが不十分なデータが含まれています。はそのrawDataAreaの16%にすることができます!= 0?は、どのように私はバイトが[] AES
Encryptorは:
aes256Alg = new AesManaged
{
Key = new byte[] {112,90,16,164,90,221,73,154,246,32,13,102,145,7,57,115,37,5,3,102,205,39,202,231,195,148,202,229,53,138,102,242},
Mode = CipherMode.CBC,
KeySize = 256,
BlockSize = 128,
Padding = PaddingMode.PKCS7,
IV = new byte[] {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
};
ICryptoTransform aes256Encryptor = aes256Alg.CreateEncryptor(aes256Alg.Key,aes256Alg.IV);
の復号化
AesManaged aes256AlgCBC;
aes256AlgCBC = new AesManaged
{
Key = new byte[] {190,151,28,108,241,101,254,174,16,11,87,84,239,140,239,85,195,25,78,192,105,109,95,128,160,146,123,31,190,188,181,216},
KeySize = 256,
Mode = CipherMode.CBC,
BlockSize = 128,
Padding = PaddingMode.PKCS7,
IV = new byte[] {199,114,91,241,148,90,133,166,13,52,142,187,101,125,81,73}
};
ICryptoTransform aes256CbcDecryptor = aes256AlgCBC.CreateDecryptor(aes256AlgCBC.Key, aes256AlgCBC.IV);
//byte[] rawDataArea = {0x00 .......} // Length of 1622 copied from hexeditor
List<Byte[]> dataAreaByteList = new List<byte[]>();
//Split the rawDataArea up to blocks of 16 bytes and then adding them to a list
//which later can be converted back to a big array
for (int i = 0; i < rawDataArea.Length; i += 16)
{
byte[] transformedBlock = new byte[] { };
aes128CbcDecryptor.TransformBlock(rawDataArea, i, (i += 16),transformedBlock,i);
dataAreaByteList.Add(transformedBlock);
}
バイト配列の長さは、パディングの出番です、そうでない場合は16倍にする必要があります。 – ThePerplexedOne
'TransformBlock'形式のインターフェイスを使いたい場合は、[' TransformFinalBlock'](https://msdn.microsoft.com/en-us/library/system.security.cryptography.icryptotransform.transformfinalblock v = .110).aspx)を最後のブロックに置きます。具体的には、ブロック全体と同じではないデータのまとまりが可能です。 –