Текстовое шифрование / дешифрование XOR Python

Я знаю, что есть встроенный оператор xor, который может быть импортирован в Python. Я пытаюсь выполнить шифрование / расшифровку xor. Пока у меня есть:

def xor_attmpt(): message = raw_input("Enter message to be ciphered: ") cipher = [] for i in message: cipher.append(bin(ord(i))[2::])#add the conversion of the letters/characters #in your message from ascii to binary withoout the 0b in the front to your ciphered message list cipher = "".join(cipher) privvyKey = raw_input("Enter the private key: ") keydecrypt = [] for j in privvyKey: keydecrypt.append(bin(ord(j))[2::]) #same keydecrypt = "".join(keydecrypt )#same print "key is '{0}'" .format(keydecrypt) #substitute values in string print "encrypted text is '{0}'" .format(cipher) from operator import xor for letter in message: print xor(bool(cipher), bool(keydecrypt)) 

Эта:

 > for letter in message: print xor(bool(cipher), bool(keydecrypt)) 

где мой питон начинает ошибаться.

Вывод выглядит так:

  Enter message to be ciphered: hello Enter the private key: \@154> key is '10111001000000110001110101110100111110' encrypted text is '11010001100101110110011011001101111' False False False False False 

То, что я испортил, пытается сравнить эти два двоичных файла (key и encrypted) и дать true (1) или false (0). Затем xor должен дать мне результирующий 1 и 0 двоичный список из сравнения этих двух. Любой вход?

    3 Solutions collect form web for “Текстовое шифрование / дешифрование XOR Python”

    Ниже приведен пример примера кода из статьи XOR Cipher Wikipedia :

     def xor(data, key): return bytearray(a^b for a, b in zip(*map(bytearray, [data, key]))) 

    Пример (Python 2):

     >>> one_time_pad = 'shared secret' >>> plaintext = 'unencrypted' >>> ciphertext = xor(plaintext, one_time_pad) >>> ciphertext bytearray(b'\x06\x06\x04\x1c\x06\x16Y\x03\x11\x06\x16') >>> decrypted = xor(ciphertext, one_time_pad) >>> decrypted bytearray(b'unencrypted') >>> plaintext == str(decrypted) True 
     somecode = 'asdfln3j34tnonfdkjnflksdfnla' message = 'this is my message' def str_xor(s1, s2): return "".join([chr(ord(c1) ^ ord(c2)) for (c1,c2) in zip(s1,s2)]) encoded = str_xor(message, somecode) # encoded == '\x15\x1b\r\x15L\x07@J^MT\x03\n\x1d\x15\x05\x0c\x0f' decoded = str_xor(encoded, somecode) # decoded == 'this is my message' 

    Это наивная / минималистическая реализация без проверки ошибок. Здесь требуется len (somecode)> = len (message).

    Код ниже работает в обоих направлениях и не требует проверки длины, поскольку цикл используется.

     from itertools import cycle, izip cryptedMessage = ''.join(chr(ord(c)^ord(k)) for c,k in izip(message, cycle(key))) 
     
    Interesting Posts for Van-Lav
    Python - лучший язык программирования в мире.