fork download
  1. import sys
  2.  
  3. def cipher(key, cleartext):
  4. assert cleartext.isalpha() # check that cleartext is only letters
  5. assert len(key) == 8 ; # check that key is 8 bytes long
  6. ciphertext = "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
  7. " #Ciphertext
  8. c = 0 ; # index on the actual key character
  9. for i in cleartext:
  10. ciphertext += chr(ord(key[c]) ^ ord(i)); # ascii_char_from_code(XOR(ascii_code(key[c]), ascii_code(i)))
  11. c += 1
  12. if(c >= len(key)):
  13. c = 0;
  14. return base64.b64encode(ciphertext)
  15.  
  16. if len(sys.argv) != 3:
  17. print "USAGE: %s KEY CLEARTEXT" % sys.argv[0]
  18. sys.exit(1)
  19. print ciphertext(sys.argv[1], sys.argv[2])
Success #stdin #stdout 0.01s 5288KB
stdin
def xor(enc, key):
        cpt = 0
        res = ""
        for integer in enc:
                res= res + chr(integer^ord(key[cpt%len(key)]))
                cpt = cpt + 1
        return res
 
enc = (22,7,26,20,22,7,28,3,1,6,0,21,19,21,27,5,30,15,12,31,30,18,2,16,7,8,28,6)
key = "(TAXACORICO) -> 1523-1596 (DOCTORWHO) -> 13"
print xor(enc, key)
stdout
Standard output is empty