def encrypt(key, plaintext): out = "" for i in range(0, len(plaintext)): out += chr(((ord(key[i % len(key)]) + ord(plaintext[i]) - (2 * 0x61)) % 26)+0x61) return out def decrypt(key, cipertext): out = "" for i in range(0, len(cipertext)): pln = ord(cipertext[i])-(ord(key[i % len(key)]) - 0x61) pln = pln + 26 if pln < 0x61 else pln out += chr(pln) return out if __name__ == "__main__": import argparse parser = argparse.ArgumentParser() parser.add_argument('FILE') command_group = parser.add_mutually_exclusive_group(required=True) command_group.add_argument('--encrypt', metavar='KEY') command_group.add_argument('--decrypt', metavar='KEY') parser.add_argument('--out', metavar='FILE') args = parser.parse_args() # strip non-alphabetic chars from file and convert to lower case t = ''.join([x for x in open(args.FILE, "r").read().lower() if x.isalpha()]) if(args.encrypt != None): out = encrypt(args.encrypt, t) if(args.decrypt != None): out = decrypt(args.decrypt, t) if(args.out != None): open(args.out, "w").write(out) else: print(out)