Почему кол-во байтов до и после шифрования с помощью 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 шт):
Шифровальщик ждет ещё данных чтоб добить блок. Шифрованные данные выдаются целыми блоками. Чтоб сказать что данных больше не будет - нужно закрыть поток и потом уже забирать зашифрованные данные или остаток.