Почему кол-во байтов до и после шифрования с помощью AES различается?

Я использую системную реализацию aes в .net и столкнулся с проблемой

Моя проблема заключается в том, что я теряю некоторое кол-во байтов в конце массива байтов после его шифровки. Мой код для шифрования:

 public byte[] Encrypt(byte[] data)
 {
     byte[] encrypted;
     using (Aes aesAlg = Aes.Create())
     {
         aesAlg.Mode = CipherMode.CBC;
         aesAlg.KeySize = 128;
         aesAlg.BlockSize = 128;
         aesAlg.Padding = PaddingMode.Zeros;
         aesAlg.Key = key;
         aesAlg.IV = iv;
         ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);
         using MemoryStream msEncrypt = new();
         using CryptoStream csEncrypt = new(msEncrypt, encryptor, CryptoStreamMode.Write);
         csEncrypt.Write(data, 0, data.Length);
         encrypted = msEncrypt.ToArray();
     }
     return encrypted;
 }

Код для дешифрования

public byte[] Decrypt(byte[] data)
 {
     byte[] decrypted;
     using (Aes aesAlg = Aes.Create())
     {
         aesAlg.Mode = CipherMode.CBC;
         aesAlg.KeySize = 128;
         aesAlg.BlockSize = 128;
         aesAlg.Padding = PaddingMode.Zeros;
         aesAlg.Key = key;
         aesAlg.IV = iv;
         ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);
         using MemoryStream msDecrypt = new();
         using CryptoStream csDecrypt = new(msDecrypt, decryptor, CryptoStreamMode.Write);
         csDecrypt.Write(data, 0, data.Length);
         decrypted = msDecrypt.ToArray();
     }
     return decrypted;
 }

К примеру, у меня есть массив байтов размером в 171 байт, я его шифрую и получаю массив размером в 160 байтов. При расшифровке этого же массива, его размер остаётся 160 элементов, что искажает изначальные данные. Как исправить пропажу байтов?


Ответы (1 шт):

Автор решения: eri

Шифровальщик ждет ещё данных чтоб добить блок. Шифрованные данные выдаются целыми блоками. Чтоб сказать что данных больше не будет - нужно закрыть поток и потом уже забирать зашифрованные данные или остаток.

→ Ссылка