«Указанный режим шифрования недопустим для этого алгоритма» в .NET CORE, но работает в .NET Standard - PullRequest
1 голос
/ 08 апреля 2019

Я пытаюсь расшифровать зашифрованный файл. Мне удалось успешно расшифровать файл в .NET Standard. Но когда я использовал тот же код в .NET Core, я получаю следующее исключение.

System.Security.Cryptography.CryptographicException: 'Specified cipher mode is not valid for this algorithm.'

Это код, который я использую для расшифровки.

public void FileDecrypt(string inputFile, string outputFile, string password)
    {
        byte[] passwordBytes = System.Text.Encoding.UTF8.GetBytes(password);
        byte[] salt = new byte[32];

        FileStream fsCrypt = new FileStream(inputFile, FileMode.Open);
        fsCrypt.Read(salt, 0, salt.Length);

        RijndaelManaged AES = new RijndaelManaged();
        AES.KeySize = 256;
        AES.BlockSize = 128;
        var key = new Rfc2898DeriveBytes(passwordBytes, salt, 50000);
        AES.Key = key.GetBytes(AES.KeySize / 8);
        AES.IV = key.GetBytes(AES.BlockSize / 8);
        AES.Padding = PaddingMode.PKCS7;
        AES.Mode = CipherMode.CFB;

        using (CryptoStream cs = new CryptoStream(fsCrypt, AES.CreateDecryptor(), CryptoStreamMode.Read))
        {
            using (FileStream fsOut = new FileStream(outputFile, FileMode.Create))
            {
                int read;
                byte[] buffer = new byte[1048576];

                while ((read = cs.Read(buffer, 0, buffer.Length)) > 0)
                {
                    fsOut.Write(buffer, 0, read);
                }
            }
        }
    }

Если я удаляю режим шифрования в .NET Core и расшифровываю, я получаю Padding Invalid Exception.

System.Security.Cryptography.CryptographicException: 'Padding is invalid and cannot be removed.'

Я изменил разные режимы заполнения и попытался, но выходной файл недействителен (неправильно расшифрован).

Почему я получаю исключение недопустимого режима шифрования в .Net Core, а не в .Net Standard? Какие изменения я должен внести в .NET Core для правильной расшифровки?

Я использую

.NET Core SDK (reflecting any global.json):
Version:   2.1.503
...