Я пытаюсь сделать простой скрипт шифрования в python. Я просто хочу использовать шифрование XOR для двоичных файлов. Мой сценарий в основном выглядит следующим образом:Xor шифрование в двоичном файле в python
def xor_c (a):
v=''
for p in a:
v += chr((ord(p)^0xA8))
return v
Целью этого является только для шифрования каждого байта в отдельности. Это должно работать, но все попытки, которые я сделал, не удались.
я впервые попробовал с:
handler = open("file",'r')
handler2 = open("output",'w')
contents = handler.read()
handler2.write(xor_c(xor_c(contents)))
Но после выполнения этих двух файлов file
и output
были разными. Поскольку входной файл был двоичный файл (то, что я хочу), я изменил сценарий:
handler = open("file",'rb')
handler2 = open("output",'wb')
contents = handler.read()
handler2.write(xor_c(xor_c(contents)))
Но это не изменило ничего. Как бы то ни было, некоторые пары байтов преобразуются в один байт на выходе (возможно, потому, что символы не ascii, но это не должно происходить с двоичным режимом ...). . Кроме того, последний байт выходе 0xA8
(логически получил от превращения \0
в конце входного файла С учетом этого я также изменил функцию xor_c
на:
def xor_c (a):
v=''
for p in a:
v += chr((ord(p)^0xA8))
return v[:-1]+'\0'
Чтобы убедиться, что последний символ всегда будет \0
, но это не работает.
Любые предложения? замечания? советы?
Благодаря
Ваш код отлично работает на моем компьютере, а 'handler2' содержит точно такие же данные, как' handler'. Кстати: ваш 'xor_c' очень неэффективен. Я бы создал таблицу переводов и вместо этого использовал 'str.translate'. – Bakuriu
Если некоторые символы представлены более чем одним байтом, это может быть файл unicode. Python 2.x и 3.x требуют разных подходов, поэтому было бы полезно указать, какая версия вы используете. – guidot
@guidot: Я использую python 2.7. @Bakuriu: Я не вижу, как я могу использовать 'str.translate()' для воссоздания, почему я хочу. – ibi0tux