def test_decrypt(self):
		cipher = Vigenere()
		cipher_text = "eylzkbzvpgwfafroeujhkgvlctwjlfvwtdzacvchkedhncxupmeajucdcgmscs"
		open_text = cipher.decrypt(cipher_text, "password")
		expected = "pythonisageneralpurposeinterpretedhighlevelprogramminglanguage"
		self.assertEqual(open_text, expected)

		self.assertEqual(cipher.decrypt("", "a"), "")
	def test_cs_crack(self):
		cipher = Vigenere()
		cracker = VigenereBruteForce()
		open_text = normalize_text("jasynpoklopurozzurendosilenstvivodarnusrovnamsezemijmenemmistrukanvodstvijamatkuvlastnivsakkdovizdaprokouknutoumelnikolivjakpribuznismrtlidemzvodarnysmrtivrchnizradkynijenslavumistrumzcistirnytedvidisotcecozzenstinytveuzralouzjetotadybratretyslezlzradcumdozadkujensedobrepodivejcostvojijimkouprovedlimusimedrzetpospoluatuznenimarnesnazenivejmenusatanarozpoutejmepeklouzsevmychpredstavachrodisedevyjevykrasnemodrenadrzecimtakrychlecernajinenitonahodouodpadnivodamrtverybynahazimedovodarenskychobjektuuznehodlamdalnaslouchattemvodarenskymblabolumsedekrysysezerouzbytkyvodarenskychkonstrukcipredpovidamvecnouskazuvodarenskemafiitakjakodavnopredcasemjsmesvatouchatrutopilystejnykonecpripravimepodvodnikumzvodarnynelzeveritnikomukdomatlamuplnoucistotyvsechnytyhlebestiecekavodazestokysmrtlidemzvodarnysmrtivrchnizradkynijenslavumistrumzcistirnyzevsechstrannavodarnusilaspinyutocizhorastavbydrtizeleznemepoklopydokristalovevodytecoucistirenskesplaskysabotaztospachanavejmenusedepravdy")
		key = "qwasd"
		cipher_text = cipher.encrypt(open_text, key)
		langmodel = LangModel(get_lang_path('cs'))
		cracked_key = cracker.crack(cipher_text, LanguageStats(langmodel))
		self.assertEqual(cracked_key, key)
示例#3
0
 def test_cs_crack(self):
     cipher = Vigenere()
     cracker = VigenereBruteForce()
     open_text = normalize_text(
         "jasynpoklopurozzurendosilenstvivodarnusrovnamsezemijmenemmistrukanvodstvijamatkuvlastnivsakkdovizdaprokouknutoumelnikolivjakpribuznismrtlidemzvodarnysmrtivrchnizradkynijenslavumistrumzcistirnytedvidisotcecozzenstinytveuzralouzjetotadybratretyslezlzradcumdozadkujensedobrepodivejcostvojijimkouprovedlimusimedrzetpospoluatuznenimarnesnazenivejmenusatanarozpoutejmepeklouzsevmychpredstavachrodisedevyjevykrasnemodrenadrzecimtakrychlecernajinenitonahodouodpadnivodamrtverybynahazimedovodarenskychobjektuuznehodlamdalnaslouchattemvodarenskymblabolumsedekrysysezerouzbytkyvodarenskychkonstrukcipredpovidamvecnouskazuvodarenskemafiitakjakodavnopredcasemjsmesvatouchatrutopilystejnykonecpripravimepodvodnikumzvodarnynelzeveritnikomukdomatlamuplnoucistotyvsechnytyhlebestiecekavodazestokysmrtlidemzvodarnysmrtivrchnizradkynijenslavumistrumzcistirnyzevsechstrannavodarnusilaspinyutocizhorastavbydrtizeleznemepoklopydokristalovevodytecoucistirenskesplaskysabotaztospachanavejmenusedepravdy"
     )
     key = "qwasd"
     cipher_text = cipher.encrypt(open_text, key)
     langmodel = LangModel(get_lang_path('cs'))
     cracked_key = cracker.crack(cipher_text, LanguageStats(langmodel))
     self.assertEqual(cracked_key, key)
	def test_encrypt(self):
		cipher = Vigenere()
		open_text = normalize_text("Python is a general-purpose, interpreted high-level programming language")
		cipher_text = cipher.encrypt(open_text, "a")
		self.assertEqual(cipher_text, open_text)

		cipher_text = cipher.encrypt(open_text, "bc")
		expected = "qaujppjubifpftbnqwsrpufkovftqtfvffikhjmgwgmrsqhtbonkoimcoivchg"
		self.assertEqual(cipher_text, expected)

		cipher_text = cipher.encrypt(open_text, "password")
		expected = "eylzkbzvpgwfafroeujhkgvlctwjlfvwtdzacvchkedhncxupmeajucdcgmscs"
		self.assertEqual(cipher_text, expected)

		self.assertEqual(cipher.encrypt("", "a"), "")
class VigenereBruteForce(object):
	"""Cryptanalysis method for Vigenere cipher"""
	def __init__(self):
		super(VigenereBruteForce, self).__init__()
		self.max_key_len = 10
		self.caesar_cracker = TriangleAttack()
		self.vigenere = Vigenere()
	
	def crack(self, cipher_text, langstats):
		key_text = self._get_possible_keys(cipher_text, langstats)
		return langstats.most_meaningful(key_text)

	def _get_possible_keys(self, cipher_text, langstats):
		for i in range(2, self.max_key_len + 1):
			partition = self._partition_text(cipher_text, i)
			key = "".join(self.caesar_cracker.crack(v, langstats) for v in partition)
			yield key, self.vigenere.decrypt(cipher_text, key)

	def _partition_text(self, text, number):
		classes = {x:[] for x in range(number)}
		for i, char in enumerate(text):
			classes[i % number].append(char)
		return ("".join(v) for k, v in classes.iteritems())
示例#6
0
class VigenereBruteForce(object):
    """Cryptanalysis method for Vigenere cipher"""
    def __init__(self):
        super(VigenereBruteForce, self).__init__()
        self.max_key_len = 10
        self.caesar_cracker = TriangleAttack()
        self.vigenere = Vigenere()

    def crack(self, cipher_text, langstats):
        key_text = self._get_possible_keys(cipher_text, langstats)
        return langstats.most_meaningful(key_text)

    def _get_possible_keys(self, cipher_text, langstats):
        for i in range(2, self.max_key_len + 1):
            partition = self._partition_text(cipher_text, i)
            key = "".join(
                self.caesar_cracker.crack(v, langstats) for v in partition)
            yield key, self.vigenere.decrypt(cipher_text, key)

    def _partition_text(self, text, number):
        classes = {x: [] for x in range(number)}
        for i, char in enumerate(text):
            classes[i % number].append(char)
        return ("".join(v) for k, v in classes.iteritems())
	def __init__(self):
		super(VigenereBruteForce, self).__init__()
		self.max_key_len = 10
		self.caesar_cracker = TriangleAttack()
		self.vigenere = Vigenere()
示例#8
0
 def __init__(self):
     super(VigenereBruteForce, self).__init__()
     self.max_key_len = 10
     self.caesar_cracker = TriangleAttack()
     self.vigenere = Vigenere()