import argparse from random import choice letter_string = "abcdefghijklmnopqrstuvwxyz" parser = argparse.ArgumentParser(description="Alphabet cipher") parser.add_argument("imp", metavar="filename/text", help="File or text to encode, specify -f if using a file") parser.add_argument("-k", metavar="key", help="Key, string of 26 letters, each letter must only be used once", default=letter_string) parser.add_argument("-f", action="store_true", help="Specify if using a file input") parser.add_argument("-r", action="store_true", help="Use a random key (key will be output)") parser.add_argument("-s", action="store_true", help="Use a random key, and don't say what the key is. This will make the output hard to decrypt.") parser.add_argument("-d", action="store_true", help="Decrypt instead of encrypting") parser.add_argument("-o", metavar="filename", help="Output to a file", default="") args = parser.parse_args() def keygen(): letters = [l for l in letter_string] def nxt(): n = choice(letters) letters.remove(n) return n key = [nxt() for n in range(len(letters))] return key def strkey(k): ks = "" for l in k: ks += l return ks plaintext = args.imp if args.f: plaintext = open(args.imp).read() else: plaintext = args.imp if args.r: key = keygen() if not args.s: print "Using Key: ", strkey(key) else: key = [l for l in args.k] def encrypt(c): return key[ord(c)-ord('a')].upper() def decrypt(c): return letter_string[key.index(c)] ciphertext = "" if args.d: trans = decrypt else: trans = encrypt for letter in plaintext.lower(): try: ciphertext += trans(letter) except: ciphertext += letter if len(args.o): open(args.o, "w+").write(ciphertext) else: print ciphertext Final password: 16f13b876