Как в pyhon зашифровать файл побайтово?
Есть код:
import os
key = [0xA3, 0xBD, 0xAD, 0x0D, 0x41, 0x11, 0xBB, 0x8D, 0xDC, 0x80, 0x2D, 0xD0, 0xD2, 0xC4, 0x9B, 0x1E, 0x26, 0xEB, 0xE3, 0x33, 0x4A, 0x15, 0xE4, 0x0A, 0xB3, 0xB1, 0x3C, 0x93, 0xBB, 0xAF, 0xF7, 0x3E]
fi = open("1.bin", "rb")
fo = open("1e .bin", "wb")
length = os.path.getsize("1.bin")
position = 0
try:
while position < length:
byte = fi.read(1)
if position >= 320 and position < 31040:
byte = chr(ord(byte) ^ key[position & 31])
fo.write(byte)
position += 1
finally:
fi.close()
fo.close()
Выдает ошибку:
TypeError: a bytes-like object is required, not 'str'
Но как можно увидеть мы считываем байт, шифруем его через XOR и пытаемся записать в другой файл...
В чем же проблема и как исправить?
Спасибо
Ответы (1 шт):
Автор решения: n1tr0xs
→ Ссылка
Вам нужно преобразовать ваш зашифрованный символ в байты.
if position >= 320 and position < 31040:
byte = chr(ord(byte) ^ key[position & 31])
byte = bytes(byte, encoding='utf-8')
Или можно сократить:
if position >= 320 and position < 31040:
byte = bytes(chr(ord(byte) ^ key[position & 31]), encoding='utf-8')
UPD:
Я бы еще заменил while на for:
for position in range(length):
byte = fi.read(1)
if position >= 320 and position < 31040:
byte = bytes(chr(ord(byte) ^ key[position & 31]), encoding='utf-8')
fo.write(byte)