def attemptCrack(self, ctext: str) -> List[CrackResult]: logger.debug(f"Trying ASCII shift cipher on {ctext}") logger.trace("Beginning cipheycore simple analysis") # Hand it off to the core analysis = self.cache.get_or_update( ctext, "cipheycore::simple_analysis", lambda: cipheycore.analyse_string(ctext), ) logger.trace("Beginning cipheycore::caesar") possible_keys = cipheycore.caesar_crack(analysis, self.expected, self.group, self.p_value) n_candidates = len(possible_keys) logger.debug(f"ASCII shift returned {n_candidates} candidates") if n_candidates == 0: logger.trace("Filtering for better results") analysis = cipheycore.analyse_string(ctext, self.group) possible_keys = cipheycore.caesar_crack(analysis, self.expected, self.group, self.p_value) candidates = [] for candidate in possible_keys: logger.trace( f"Candidate {candidate.key} has prob {candidate.p_value}") translated = cipheycore.caesar_decrypt(ctext, candidate.key, self.group) candidates.append( CrackResult(value=translated, key_info=candidate.key)) return candidates
def attemptCrack(self, ctext: str) -> List[CrackResult]: logger.debug("Trying caesar cipher") # Convert it to lower case # # TODO: handle different alphabets if self.lower: message = ctext.lower() else: message = ctext logger.trace("Beginning cipheycore simple analysis") # Hand it off to the core analysis = self.cache.get_or_update( ctext, "cipheycore::simple_analysis", lambda: cipheycore.analyse_string(message), ) logger.trace("Beginning cipheycore::caesar") possible_keys = cipheycore.caesar_crack(analysis, self.expected, self.group, True, self.p_value) n_candidates = len(possible_keys) logger.debug(f"Caesar returned {n_candidates} candidates") candidates = [] for candidate in possible_keys: translated = cipheycore.caesar_decrypt(message, candidate.key, self.group) candidates.append( CrackResult(value=translated, key_info=candidate.key)) return candidates
def decrypt(self, message): logger.debug("Trying caesar Cipher") # Convert it to lower case # # TODO: handle different alphabets message = message.lower() # Hand it off to the core group = cipheydists.get_charset("english")["lcase"] expected = cipheydists.get_dist("lcase") analysis = cipheycore.analyse_string(message) possible_keys = cipheycore.caesar_crack(analysis, expected, group) n_candidates = len(possible_keys) logger.debug(f"Caesar cipher core heuristic returned {n_candidates} candidates") for candidate in possible_keys: translated = cipheycore.caesar_decrypt(message, candidate.key, group) result = self.lc.checkLanguage(translated) if result: logger.debug(f"Caesar cipher returns true {result}") return { "lc": self.lc, "IsPlaintext?": True, "Plaintext": translated, "Cipher": "Caesar", "Extra Information": f"The rotation used is {candidate.key}", } # if none of them match English, return false! logger.debug(f"Caesar cipher returns false") return { "lc": self.lc, "IsPlaintext?": False, "Plaintext": None, "Cipher": "Caesar", "Extra Information": None, }