Мне нужно зашифровать/дешифровать файл с помощью xor с помощью Python 3, у меня есть код, который отлично работает в Python 2, но при попытке адаптировать его к Python 3 дает мне некоторые ошибки, которые я не могу решить.Xor шифрование/дешифрование файла с помощью Python 3
Этот код прекрасно работает в Python 2.7:
from itertools import cycle
def xore(data, key):
return ''.join(chr(ord(a)^ord(b)) for (a, b) in zip(data, cycle(key)))
with open('inputfile.jpg', 'rb') as encry, open('outputfile.jpg', 'wb') as decry:
decry.write(xore(encry.read(), 'anykey'))
Ошибка при попытке запустить без изменений в Python 3:
Traceback (most recent call last):
File "ask.py", line 8, in <module>
decry.write(xore(encry.read(), 'anykey'))
File "ask.py", line 5, in xore
return ''.join(chr(ord(a)^ord(b)) for (a, b) in zip(data, cycle(key)))
File "ask.py", line 5, in <genexpr>
return ''.join(chr(ord(a)^ord(b)) for (a, b) in zip(data, cycle(key)))
TypeError: ord() expected string of length 1, but int found
Пожалуйста, если кто-то может объяснить и помочь мне адаптировать этот код на Python 3.
Попробуйте это: 'return '' .join (chr (ord (str (a))^ord (str (b))) для (a, b) в zip (данные, цикл (ключ))) ' –
Вы открываете файл с' b', поэтому 'a' является int каждый раз,' '' .join (chr (a^ord (b)) для (a, b) в zip (данные, цикл (ключ)))) ' –
Если они уже запущены, не могли бы вы просто удалить вызов' ord'? –