Openssl AES_256_CB C in C# - PullRequest
       48

Openssl AES_256_CB C in C#

0 голосов
/ 22 апреля 2020

Я пытаюсь расшифровать и зашифровать файл с помощью C# и openssl.

Я использую этот commnd в openSsl для шифрования файла:

openssl aes-256-cbc -e -in<fileToEncrypt> -out <fileEncypted> -pass pass:<password>

и затем использую этот код в c#

private static void FileDecrypt(string inputFileName, string outputFileName, string password)
    {
        byte[] passwords = Encoding.UTF8.GetBytes(password);
        byte[] salt = new byte[32];
        using (FileStream fsCrypt = new FileStream(inputFileName, FileMode.Open))
        {
            fsCrypt.Read(salt, 0, salt.Length);
            RijndaelManaged AES = new RijndaelManaged();
            AES.KeySize = 256;//aes 256 bit encryption c#
            AES.BlockSize = 128;//aes 128 bit encryption c#
            var key = new Rfc2898DeriveBytes(passwords, salt, 50000);
            AES.Key = key.GetBytes(AES.KeySize / 8);
            AES.IV = key.GetBytes(AES.BlockSize / 8);
            AES.Padding = PaddingMode.Zeros;
            AES.Mode = CipherMode.CBC;
            using (CryptoStream cryptoStream = new CryptoStream(fsCrypt, AES.CreateDecryptor(), CryptoStreamMode.Read))
            {
                using (FileStream fsOut = new FileStream(outputFileName, FileMode.Create))
                {
                    int read;
                    byte[] buffer = new byte[1048576];
                    while ((read = cryptoStream.Read(buffer, 0, buffer.Length)) > 0)
                    {
                        fsOut.Write(buffer, 0, read);
                    }
                }
            }
        }
    }

В результате получается поврежденный файл. Вместо этого, если я использую

   PaddingMode.PKCS7;

, возникает ошибка: заполнение недопустимо и не может быть удалено. '

Справка. Могу ли я расшифровать aes_256_cb c в c#?

PS Я вынужден использовать эту команду openSsl. Мне нужно решение для c# кода.

...