import sys def cipher(key, cleartext): ciphertext = "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 " #Ciphertext c = 0 ; # index on the actual key character for i in cleartext: ciphertext += chr(ord(key[c]) ^ ord(i)); # ascii_char_from_code(XOR(ascii_code(key[c]), ascii_code(i))) c += 1 if(c >= len(key)): c = 0; return base64.b64encode(ciphertext) if len(sys.argv) != 3: print "USAGE: %s KEY CLEARTEXT" % sys.argv[0] print ciphertext(sys.argv[1], sys.argv[2])
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)