#!/usr/bin/python3 # -*- coding: utf-8 -*- # Affine Cipher Hacker # https://www.nostarch.com/crackingcodes (BSD Licensed) import affineCipher, detectEnglish, cryptomath from typing import Optional SILENT_MODE = False def main() -> None: # You might want to copy & paste this text from the source code at # https://www.nostarch.com/crackingcodes/affineHacker.py myMessage = """"5QG9ol3La6QI93!xQxaia6faQL9QdaQG1!!axQARLa!!AuaRLQ\ ADQALQG93!xQxaGaAfaQ1QX3o1RQARL9Qda!AafARuQLX1LQALQI1iQX3o1RN"Q-5!1RQP36ARu""" hackedMessage = hackAffine(myMessage) if hackedMessage != None: # The plaintext is displayed on the screen. For the convenience of # the user, we copy the text of the code to the clipboard. print("Copying hacked message to clipboard:") print(hackedMessage) else: print("Failed to hack encryption.") def hackAffine(message: str) -> Optional[str]: print("Hacking...") # Python programs can be stopped at any time by pressing Ctrl-C (on # Windows) or Ctrl-D (on Mac and Linux) print("(Press Ctrl-C or Ctrl-D to quit at any time.)") # Brute-force by looping through every possible key for key in range(len(affineCipher.SYMBOLS) ** 2): keyA = affineCipher.getKeyParts(key)[0] if cryptomath.gcd(keyA, len(affineCipher.SYMBOLS)) != 1: continue decryptedText = affineCipher.decryptMessage(key, message) if not SILENT_MODE: print("Tried Key %s... (%s)" % (key, decryptedText[:40])) if detectEnglish.isEnglish(decryptedText): # Check with the user if the decrypted key has been found. print() print("Possible encryption hack:") print("Key: %s" % (key)) print("Decrypted message: " + decryptedText[:200]) print() print("Enter D if done, anything else to continue hacking:") response = input("> ") if response.strip().upper().startswith("D"): return decryptedText return None # If affineHacker.py is run (instead of imported as a module) # call the main() function. if __name__ == "__main__": main()