System.Security.Cryptography.CryptographicException: «Входные данные не являются полным блоком». в потоке. Закрыть () - PullRequest
1 голос
/ 12 марта 2020

С приведенным ниже кодом, я получаю сообщение об ошибке на stream2.Close():

System.Security.Cryptography.CryptographicException: «Входные данные не полный блок.

Я искал по inte rnet, но, похоже, решение не соответствует моей программе.

public static byte[] AES_Decrypt(byte[] bytesToBeDecrypted, byte[] passwordBytes)
    {
        byte[] buffer = null;
        byte[] buffer1 = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 };
        byte[] salt = buffer1;
        using (MemoryStream stream = new MemoryStream())
        {
            using (RijndaelManaged managed = new RijndaelManaged())
            {
                managed.KeySize = 0x100;
                managed.BlockSize = 0x80;
                Rfc2898DeriveBytes bytes = new Rfc2898DeriveBytes(passwordBytes, salt, 0x3e8);
                managed.Key = bytes.GetBytes(managed.KeySize / 8);
                managed.IV = bytes.GetBytes(managed.BlockSize / 8);
                managed.Mode = CipherMode.CBC;
                using (CryptoStream stream2 = new CryptoStream((Stream)stream, managed.CreateDecryptor(), CryptoStreamMode.Write))
                {
                    stream2.Write(bytesToBeDecrypted, 0, bytesToBeDecrypted.Length);
                    stream2.Close();
                }
                buffer = stream.ToArray();
            }
        }
        return buffer;
    }

1 Ответ

0 голосов
/ 12 марта 2020

Для режима CB C входной размер зашифрованного текста, в данном случае bytesToBeDecrypted, должен быть кратным размеру блока (16 байтов для AES, независимо от размера ключа). Почему-то ваш входной размер не кратен размеру блока.

Однако мы не можем сказать, почему bytesToBeDecrypted не кратен размеру блока, это за пределами фрагмента кода. Обычно это либо то, что данные не считываются до конца зашифрованного текста, либо здесь произошла ошибка кодирования / декодирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...