from utils import CipherUtils def encrypt_text(cleartext: str = 'Bitcoin', incrementation: int = 13): """ This method encrypts a text by shifting each letter by the value of incrementation :param cleartext: The secret message to encrypt :param incrementation: How much the letters should be shifted :return: Encrypted text """ return shift_text(cleartext, (incrementation % 26)) # '%' to repeat after 26 with 0 def decrypt_text(encrypted_text: str = 'Ovgpbva', incrementation: int = 13): """ This method decrypts a text by shifting each letter by the value of incrementation :param encrypted_text: The encrypted secret message to decrypt :param incrementation: How much the letters should be shifted :return: Decrypted text """ return shift_text(encrypted_text, 26 - (incrementation % 26)) # '%' to repeat after 26 with 0 def shift_text(cleartext: str, incrementation: int): """ This method shifts every letter of a string by the value of incrementation :param cleartext: The string to be shifted :param incrementation: How much the letters should be shifted :return: Shifted text """ shifted_text = '' for char in cleartext: shifted_text += CipherUtils.shift_char(char, incrementation) return shifted_text def brute_force_example(cleartext: str = 'Bitcoin', incrementation: int = 7): """ This is an example of how to bruteforce an encrypted text. (Encrypted with Letter-Shifting) :param cleartext: The secret message to encrypt and decrypt during bruteforcing :param incrementation: How much the letters should be shifted """ encrypted_text = encrypt_text(cleartext, incrementation=incrementation) for x in range(26): if cleartext == decrypt_text(encrypted_text, incrementation=x): print(f'Text was shifted by {x} letters.') if __name__ == '__main__': print(encrypt_text()) print(decrypt_text()) brute_force_example()