Ошибка XOR в Python (2.7)

У меня есть список зашифрованных байтов XOR, записанных в шестнадцатеричном формате (содержится в «cipher.txt», по одному байту в строке), и я знаю, что используемый ключ XOR — это один байт. Поэтому я пытаюсь использовать метод грубой силы следующим образом:

f = open("cipher.txt", "r")
ciphers = f.readlines()
f.close

for x in range(0, 255):
    key = bin(int(x))[2:]
    for line in ciphers:
        w = bin(int(line, 16))[2:]
        y = int(w)
        z = y ^ x
    print chr(z),
print ""

Там мои результаты (z) не остаются бинарными. Вместо этого я получаю такие результаты, как «10010084». Если я не использую часть «y = int (w)», я получаю «неподдерживаемый тип (ы) операнда для ^: «str» и «int» в качестве ошибки, хотя я не понимаю, почему, поскольку определение переменной похоже на «ключевую» переменную, которая работает.

Я подозреваю, что в моем коде есть одна большая действительно глупая ошибка, из-за которой он не работает. Кто-нибудь может посоветовать?


person fragman    schedule 22.06.2012    source источник
comment
@cval большое спасибо, это помогло.   -  person fragman    schedule 22.06.2012


Ответы (1)


Попробуй это:

y = int(w, base=2)

также вы не закрыли f:

f.close()

Я предлагаю использовать контекстный менеджер для управления открытыми файлами:

with open("cipher.txt", "r") as f:
    ciphers = f.readlines()
person cval    schedule 22.06.2012