Skip to content Skip to sidebar Skip to footer

Xor Python Text Encryption/decryption

I know there is a built in xor operator that can be imported in Python. I'm trying to execute the xor encryption/decryption. So far I have: def xor_attmpt(): message = raw_in

Solution 1:

Here's a variation of the code example from XOR Cipher Wikipedia article:

defxor(data, key): 
    returnbytearray(a^b for a, b inzip(*map(bytearray, [data, key]))) 

Example (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

Solution 2:

Code below works both ways and does not need length checking as cycle is used.

from itertools import cycle, izip
cryptedMessage = ''.join(chr(ord(c)^ord(k)) for c,k in izip(message, cycle(key)))

Solution 3:

somecode = 'asdfln3j34tnonfdkjnflksdfnla'
message = 'this is my message'defstr_xor(s1, s2):
 return"".join([chr(ord(c1) ^ ord(c2)) for (c1,c2) inzip(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'

This is a naive / minimalistic implementation without error checking. Here len(somecode) >= len(message) is required.

Solution 4:

for Python 3

from itertools import cycle

cryptedMessage = ''.join(chr(ord(c)^ord(k)) for c,k inzip(message, cycle(key)))

Post a Comment for "Xor Python Text Encryption/decryption"