Krypto_Grundlagen/chapter_one/Permutations-Chiffre.py

73 lines
1.6 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():
"""
Generates a key that can be used for this cipher.
:return: The key as a list of indices
"""
indices = [i for i in range(26)]
random.shuffle(indices)
return indices
def generate_key_with_keyword(keyword: str):
result = []
for char in keyword:
charIndex = au.get_index_of_letter(char)
if charIndex not in result:
result.append(charIndex)
remainingIndices = [i for i in range(26-len(result))]
result.extend(remainingIndices)
return result
if __name__ == '__main__':
key = generate_key_with_keyword('patrick')
print(key)
encrypted = encrypt_text('BonkRocks', key)
print(encrypted)
print(decrypt_text(encrypted, key))