Advertisement
Guest User

Vingere

a guest
Jan 22nd, 2020
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.37 KB | None | 0 0
  1. from typing import List
  2. import argparse
  3.  
  4. IDX_OF_LOWERCASE_A = ord("a")
  5. CIPHER_TEXT = "oplxombzseviwyklcgvmghupwiqmyfsijlkyt"  # "BQQCKVOUCKORNOAUSRFUAGLJHJBTKDMSRPUVNROCNF"
  6.  
  7. def convert_to_base(key_number: int, base: int=26):
  8.     key_list = []
  9.     while key_number > 0:
  10.         key_list.insert(0, key_number % base)
  11.         key_number //= base
  12.     print('Vigenère key is:', ''.join(
  13.         [chr(n + IDX_OF_LOWERCASE_A) for n in key_list]))
  14.     return key_list
  15.  
  16. def crypt(cipher: str, key: List[int], *, decrypt=True):
  17.     cipher_list = [ord(c) - IDX_OF_LOWERCASE_A for c in cipher.lower()]
  18.     key_pointer = 0
  19.     plain_numeric = []
  20.     operator = -1 if decrypt else 1
  21.     for c in cipher_list:
  22.         plain_numeric.append((c + key[key_pointer] * operator) % 26)
  23.         key_pointer = (key_pointer + 1) % len(key)
  24.     return ''.join([chr(d + IDX_OF_LOWERCASE_A) for d in plain_numeric])
  25.  
  26.  
  27. if __name__ == "__main__":
  28.     parser = argparse.ArgumentParser(description='Vingere decryption tool')
  29.     parser.add_argument('key', type=int, help='enter your key as an integer')
  30.     parser.add_argument('-e', '--encrypt', default=None)
  31.     args = parser.parse_args()
  32.     key_26 = convert_to_base(int(args.key), 26)
  33.     if args.encrypt is None:
  34.         print(crypt(CIPHER_TEXT, key_26, decrypt=True))
  35.     else:
  36.         print(crypt(args.encrypt, key_26, decrypt=False))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement