56 lines
1.2 KiB
Python
56 lines
1.2 KiB
Python
|
import random
|
||
|
|
||
|
from utils import AlphabetUtils as au
|
||
|
|
||
|
|
||
|
def encrypt_text(cleartext: str, key: [int]):
|
||
|
"""
|
||
|
Encrypts the given text with the given key
|
||
|
:param cleartext: The text to encrypt
|
||
|
:param key: The key to use. Has to be a list of indices of the alphabet, so [0...25] shuffled
|
||
|
:return: The encrypted text
|
||
|
"""
|
||
|
resulting = ''
|
||
|
|
||
|
for char in cleartext:
|
||
|
charIndex = au.get_index_of_letter(char)
|
||
|
cipherIndex = key.index(charIndex)
|
||
|
cipherChar = au.get_letter_at_index(cipherIndex)
|
||
|
resulting += cipherChar
|
||
|
|
||
|
return resulting
|
||
|
|
||
|
|
||
|
def decrypt_text(ciphertext: str, key: [int]):
|
||
|
"""
|
||
|
Decrypts the given ciphertext with the given key
|
||
|
:param ciphertext: The text to decrypt
|
||
|
:param key: The key to use. Has to be a list of indices of the alphabet, so [0...25] shuffled
|
||
|
:return: The decrypted text
|
||
|
"""
|
||
|
resulting = ''
|
||
|
|
||
|
for char in ciphertext:
|
||
|
charIndex = au.get_index_of_letter(char)
|
||
|
clearIndex = key[charIndex]
|
||
|
clearChar = au.get_letter_at_index(clearIndex)
|
||
|
resulting += clearChar
|
||
|
|
||
|
return resulting
|
||
|
|
||
|
|
||
|
def _generate_key():
|
||
|
indices = [i for i in range(26)]
|
||
|
|
||
|
random.shuffle(indices)
|
||
|
|
||
|
return indices
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
key = _generate_key()
|
||
|
print(key)
|
||
|
encrypted = encrypt_text('BonkRocks', key)
|
||
|
print(encrypted)
|
||
|
print(decrypt_text(encrypted, key))
|