Я зашифровал 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')