One of the cool things about XOR encryption is that when you apply it twice, you get back the original string – see http://en.wikipedia.org/wiki/XOR_cipher.
In your function, xor_decrypt
, you take string and key and return string ^ key
. If, now, you xor that with the key again, you get (string ^ key) ^ key = string ^ (key ^ key) = string ^ identity = string
(by properties of XOR operator: http://en.wikipedia.org/wiki/Exclusive_or#Properties)
Thus, you can just run your function, xor_encrypt
, a second time on the output of the first xor_encrypt
.