バイト[]の暗号化配列を実行する必要があります。Microsoft で入手可能な例を使用しました。残念ながら、暗号化されたデータは 16 の倍数のサイズに切り捨てられます。データの例でバイト 0 を 8 倍にすると、データは適切に暗号化されます。パディングが設定されていますが、それを変更するものは何もありません。この問題を解決するには、データが途切れないようにします。
public byte[] EncryptAES(byte[] plainBytes)
{
System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
byte[] FKey = encoding.GetBytes("A002AD9AD73C402190C3E733D82CEA00");
byte[] FIV = encoding.GetBytes("zyxwvutsrqponmlk");
// Check arguments.
if (plainBytes == null || plainBytes.Length <= 0)
throw new ArgumentNullException("plainText");
if (FKey == null || FKey.Length <= 0)
throw new ArgumentNullException("Key");
if (FIV == null || FIV.Length <= 0)
throw new ArgumentNullException("Key");
byte[] encrypted;
// Create an RijndaelManaged object
// with the specified key and IV.
using (RijndaelManaged rijAlg = new RijndaelManaged())
{
rijAlg.Key = FKey;
rijAlg.IV = FIV;
rijAlg.Padding = PaddingMode.Zeros;
rijAlg.Mode = CipherMode.CBC;
// Create a decrytor to perform the stream transform.
ICryptoTransform encryptor = rijAlg.CreateEncryptor(rijAlg.Key, rijAlg.IV);
// Create the streams used for encryption.
using (MemoryStream msEncrypt = new MemoryStream())
{
using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
{
// plainBytes.Length = 2216
csEncrypt.Write(plainBytes, 0, plainBytes.Length);
// encrypted.Length = 2208
encrypted = msEncrypt.ToArray();
}
}
}
// Return the encrypted bytes from the memory stream.
return encrypted;
}