Source code for pycrypt.solvers.bruteforcesolver

import solver
from ..translators.caesartranslator import *
from ..keygenerators.numberkeygenerator import *
from ..keygenerators.keygenerator import *
from ..scorers.czechscorer import *

[docs]class BruteForceSolver(solver.Solver): """Tries out all possible solutions""" def __init__(self, keyGenerator=NumberKeyGenerator(), translator=CaesarTranslator(), scorer=CzechScorer(), quiet=False): """keyGenerator can be either KeyGenerator or iterable, to silence text output use quiet""" solver.Solver.__init__(self, keyGenerator, translator, scorer) if (quiet): self.printer = lambda *x: None self.lastPrint = lambda *x: None
[docs] def solve(self, text=None, return_all_keys=False): best = (0.0, None) all_keys = [] gen = self.keyGenerator if (isinstance(self.keyGenerator, KeyGenerator)): # otherwise iterable gen = self.keyGenerator.getAllKeys() for key in gen: score, ciphered_text = self.score(key, text) if (return_all_keys): all_keys.append((score, key)) self.printer(key, score, ciphered_text) if (score > best[0]): best = (score, key) self.lastPrint(best[1], best[0], self.score(best[1], text)[1]) if (return_all_keys): return sorted(all_keys, key=lambda x: -x[0]) return best
[docs] def lastPrint(self, key, score, text=None): print print "=====Best Solution=====" print "Score:", score print "Key:", "".join(key) print "Text:", text
[docs] def setKeyGenerator(self, keyGenerator): self.keyGenerator = keyGenerator
[docs] def setStartingPoint(self, startingPoint): raise NotImplementedError()