При переносе кода python2 на python3 мы сталкиваемся с проблемой в разделе gzip кода, который сжимает зашифрованный поток DES3.
Ниже приведен код для шифрования данных в DES3 и затем записываем в файл gzip:
def createEncryptedFile(key, enc_iv, path):
checksum_generation = 'ciphertext'
tmp_fd = open(path, 'w')
encrypted_stream = utils.DES3Cipher(tmp_fd, key, enc_iv, checksum_generation)
with gzip.GzipFile(fileobj=encrypted_stream, mode='w') as fo:
fo.write(bytes('Testing Data For Gzip', 'latin-1'))
encrypted_stream.close()
tmp_fd.close()
Ниже приведен код для расшифровки и распаковки содержимого:
def decryptFile(key, enc_iv, path):
update_size = os.path.getsize(path)
with open(path, 'r') as update_file:
decrypted_data = ''.join(utils.decrypt_des3_cbc_stream(update_file, update_size, key, enc_iv))
inner_data = io.BytesIO(decrypted_data.encode('latin-1'))
with gzip.GzipFile(fileobj=inner_data, mode='rb') as fo:
print("The unzipped data: ", fo.read())
Я получаю следующую ошибку:
print("The unzipped data: ", fo.read())
File "/usr/lib64/python3.7/gzip.py", line 276, in read
return self._buffer.read(size)
File "/usr/lib64/python3.7/gzip.py", line 463, in read
if not self._read_gzip_header():
File "/usr/lib64/python3.7/gzip.py", line 411, in _read_gzip_header
raise OSError('Not a gzipped file (%r)' % magic)
OSError: Not a gzipped file (b'\x08\x08')
Я протестировал методы шифрования / дешифрования DES3 отдельно и исключил возможность ошибки там.
Ошибка, кажется, находится в разделе gzip, есть идеи?