Необходимо в приложении осуществить AES шифрование. Собственно, заходим в документацию, копируем код, и он не работает. Если быть точным, расшифровать не получается из-за ошибки
System.Security.Cryptography.CryptographicException Заполнение неверно и не может быть удалено.
(см. код). В чём может быть проблема, и как её исправить?
//Всё нормально работает. Возвращается какой-то новый массив байт.
byte[] EncryptAes(byte[] data, byte[] key, byte[] initVector)
{
using (var aes = new AesManaged())
{
aes.Key = key;
aes.IV = initVector;
var encryptor = aes.CreateEncryptor(aes.Key, aes.IV);
using (var encryptedStream = new MemoryStream())
{
using (var cryptoStream = new CryptoStream(encryptedStream, encryptor, CryptoStreamMode.Write))
{
cryptoStream.Write(data, 0, data.Length);
return encryptedStream.ToArray();
}
}
}
}
//Ошибка на самом последнем шаге
byte[] DecryptAes(byte[] data, byte[] key, byte[] initVector)
{
using (var aes = new AesManaged())
{
aes.Key = key;
aes.IV = initVector;
var decryptor = aes.CreateDecryptor(aes.Key, aes.IV);
using (var dataStream = new MemoryStream(data))
{
using (var cryptoStream = new CryptoStream(dataStream, decryptor, CryptoStreamMode.Read))
{
using (var decryptedStream = new MemoryStream())
{
//System.Security.Cryptography.CryptographicException Заполнение неверно и не может быть удалено.
cryptoStream.CopyTo(decryptedStream);
return decryptedStream.ToArray();
}
}
}
}
}