Шифрование файла с использованием алгоритма AES-256 в .NET и дешифрование в python3.6 - PullRequest
0 голосов
/ 02 мая 2019

Я зашифровал pdf-файл с использованием алгоритма AES в .NET, но я не могу правильно расшифровать его, когда я делаю это на python.Мне нужен этот трубопровод для моего бизнеса.Расшифрованный файл соответствует исходному файлу, но есть некоторые очень незначительные изменения по сравнению с оригиналом, из-за которых он не записывается на диск.Я прилагаю код как для .NET и Python, а также там выходные двоичные файлы.Пожалуйста, помогите распознать существующую ошибку.

Я пытался закодировать и декодировать выходные данные в ascii, utf-8 и base64, но мне ничего не помогло.Только небольшое изменение в кодировке сделает работу за меня.

.NET CODE для шифрования / дешифрования
static AES()
        {
            aesManaged = new AesManaged();
            encryptor = aesManaged.CreateEncryptor(key, iv);
            decryptor = aesManaged.CreateDecryptor(key, iv);
        }

        public static byte[] Transform(byte[] inputBuf, bool decrypt)
        {
            byte[] outArray = new byte[] { };

            using (AesManaged aesManaged = new AesManaged())
            {
                if (decrypt)
                {
                    #region Decryption
                    outArray = decryptor.TransformFinalBlock(inputBuf, 0, inputBuf.Length);

                    return outArray;
                    #endregion
                }
                else
                {
                    #region Encryption
                    outArray = encryptor.TransformFinalBlock(inputBuf, 0, inputBuf.Length);

                    return outArray;
                    #endregion
                }
            }
        }


        public static void Transform(string inputPath, string outputPath, bool decrypt = false)
        {
            int numRead = 0;
            const int BUF_SIZE = 1024;

            byte[] buf = new byte[BUF_SIZE];

            using (FileStream fs = new FileStream(inputPath, FileMode.Open, FileAccess.Read))
            {
                using (BinaryWriter binWriter = new BinaryWriter(new FileStream(outputPath, FileMode.OpenOrCreate, FileAccess.ReadWrite)))
                {
                    while((numRead = fs.Read(buf, 0, BUF_SIZE)) > 0)
                    {
                        byte[] transformed = Transform(buf, decrypt);

                        binWriter.Write(transformed);
                    }
                }
            }
        }

python3.6 код для расшифровки того же файла

def decrypt(in_filename, chunksize=1024):
    out_filename = 'newDecoded.pdf'
    private_key = key_orginal
    with open(in_filename, 'rb') as infile:
        cipher = AES.new(private_key, AES.MODE_CBC, iv)
        with open(out_filename, 'wb') as outfile:
            while True:
                chunk = infile.read(chunksize)
                #chunk = infile.read()
                print(sys.getsizeof(chunk))
                if len(chunk) == 0:
                    break
                elif len(chunk) % 16 != 0:
                    chunk += 16 - len(chunk) % 16
                #decoded = base64.b64decode(chunk)
                #print(sys.getsizeof(decoded))
                text = cipher.decrypt(chunk)
                print(text)
                outfile.write(text)
    print('Done')
...