Задать вопрос
Griboks
@Griboks

Дешифровка AES?

Необходимо в приложении осуществить 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();
                        }
                    }
                }
            }
        }
  • Вопрос задан
  • 1433 просмотра
Подписаться 2 Простой 5 комментариев
Решения вопроса 1
@Sumor
Пока cryptoStream не закончил свою работу считывать данные бессмысленно.
Правильный вариант шифрования:
using (var encryptedStream = new MemoryStream())
{
	using (var cryptoStream = new CryptoStream(encryptedStream, encryptor, CryptoStreamMode.Write))
	{
		cryptoStream.Write(data, 0, data.Length);
	}
	return encryptedStream.ToArray();
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы