Как в 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)
→ Ссылка