Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from typing import List
- import argparse
- IDX_OF_LOWERCASE_A = ord("a")
- CIPHER_TEXT = "oplxombzseviwyklcgvmghupwiqmyfsijlkyt" # "BQQCKVOUCKORNOAUSRFUAGLJHJBTKDMSRPUVNROCNF"
- def convert_to_base(key_number: int, base: int=26):
- key_list = []
- while key_number > 0:
- key_list.insert(0, key_number % base)
- key_number //= base
- print('Vigenère key is:', ''.join(
- [chr(n + IDX_OF_LOWERCASE_A) for n in key_list]))
- return key_list
- def crypt(cipher: str, key: List[int], *, decrypt=True):
- cipher_list = [ord(c) - IDX_OF_LOWERCASE_A for c in cipher.lower()]
- key_pointer = 0
- plain_numeric = []
- operator = -1 if decrypt else 1
- for c in cipher_list:
- plain_numeric.append((c + key[key_pointer] * operator) % 26)
- key_pointer = (key_pointer + 1) % len(key)
- return ''.join([chr(d + IDX_OF_LOWERCASE_A) for d in plain_numeric])
- if __name__ == "__main__":
- parser = argparse.ArgumentParser(description='Vingere decryption tool')
- parser.add_argument('key', type=int, help='enter your key as an integer')
- parser.add_argument('-e', '--encrypt', default=None)
- args = parser.parse_args()
- key_26 = convert_to_base(int(args.key), 26)
- if args.encrypt is None:
- print(crypt(CIPHER_TEXT, key_26, decrypt=True))
- else:
- print(crypt(args.encrypt, key_26, decrypt=False))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement