XOR файл побайтовый, сохранить вывод в ASCII? - PullRequest
0 голосов
/ 26 марта 2020

Я хочу прочитать файл символ за символом и XOR каждый байт с 172, затем сохранить как новый файл.

Я сделал следующее:

b = bytearray(open('in.txt', 'rb').read())
for i in range(len(b)):
    b[i] ^= 0xAC # XOR byte with 172
open('out.txt', 'wb').write(b)

Попытка его на примере текстового файла:

ïÃÂËÞÍØÙÀÍØÅÃÂß

Я получаю мусор:

oo/o.o'o2o!o4o5o,o!o4o)o/o.o3

Вместо этого ожидается ожидаемый вывод:

Congratulations

Делаем это с помощью стороны, я получаю ожидаемый результат:

str(chr(0xEF ^ 0xAC)) # 'C', 'ï' XOR 172 = 67, 67 to ASCII is 'C'
str(chr(0xC3 ^ 0xAC)) # 'o'
str(chr(0xC2 ^ 0xAC)) # 'n'
...

Но попытка его автоматизации приводит к бессмысленности. Почему это не работает правильно и как я могу получить ожидаемый результат?

1 Ответ

2 голосов
/ 26 марта 2020

Ваш файл in.txt не использует однобайтовую кодировку символов Windows -1254 , как вы ожидаете, но, возможно, многобайтовую кодировку UTF-8 .

...