diff --git a/Verschiebe-Chiffre.py b/Verschiebe-Chiffre.py deleted file mode 100644 index 1dfbfad..0000000 --- a/Verschiebe-Chiffre.py +++ /dev/null @@ -1,33 +0,0 @@ -def encrypt_text(cleartext: str = 'Bitcoin', incrementation: int = 13): - encrypted_text = '' - - for char in cleartext: - encrypted_text += increment_char(char, incrementation) - - return encrypted_text - - -def increment_char(char, incrementation: int = 1): - # converting character to byte - char_in_bytes = bytes(char, 'utf-8')[0] - if char_in_bytes + incrementation >= 91 and char_in_bytes < 91 \ - or char_in_bytes + incrementation >= 123: # z -> 122 | 90 -> Z so go backwards - new_char_in_bytes = bytes([char_in_bytes - (26 - incrementation)]) - else: - new_char_in_bytes = bytes([char_in_bytes + incrementation]) - - return str(new_char_in_bytes)[2] - - -def decrypt_text(encrypted_text: str = 'Ovgpbva', incrementation: int = 13): - cleartext = '' - - for char in encrypted_text: - cleartext += increment_char(char, 26 - incrementation) - - return cleartext - - -if __name__ == '__main__': - print(encrypt_text()) - print(decrypt_text()) diff --git a/chapter_one/Verschiebe-Chiffre.py b/chapter_one/Verschiebe-Chiffre.py new file mode 100644 index 0000000..34cb9a8 --- /dev/null +++ b/chapter_one/Verschiebe-Chiffre.py @@ -0,0 +1,75 @@ +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 += increment_char(char, incrementation) + + return shifted_text + + +def increment_char(char, incrementation: int = 1): + """ + This method shifts one char by the value of incrementation + + :param char: Char to be shifted + :param incrementation: How much the char should be shifted + :return: Shifted letter + """ + # converting character to byte + char_in_bytes = bytes(char, 'utf-8')[0] + if char_in_bytes + incrementation >= 91 and char_in_bytes < 91 \ + or char_in_bytes + incrementation >= 123: # z -> 122 | 90 -> Z so go backwards + new_char_in_bytes = bytes([char_in_bytes - (26 - incrementation)]) + else: + new_char_in_bytes = bytes([char_in_bytes + incrementation]) + + return str(new_char_in_bytes)[2] + + +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()