desifrace vigenera
authorTomas Musil <tomik.musil@gmail.com>
Fri, 30 Mar 2012 12:40:19 +0000 (14:40 +0200)
committerTomas Musil <tomik.musil@gmail.com>
Fri, 30 Mar 2012 12:40:19 +0000 (14:40 +0200)
robot.py
vigenere.py

index 96f5a5b..16897a6 100755 (executable)
--- a/robot.py
+++ b/robot.py
@@ -150,7 +150,9 @@ if mod_x and len(zprava) >= 10:
 # Vigenere
 if 'V' in opsny:
     analyza.append("\nHeslo k Vigenerovi (" + opsny[-1] + "):")
-    analyza.append(vigenere.zjisti_heslo(zprava, int(opsny[-1])))
+    vig_heslo, vig_text = vigere.vsechno(zprava, int(opsny[-1]))
+    analyza.append(vig_heslo)
+    analyza.append(vig_text)
 
 # Jakobsen
 if mod_m:
index a441f57..01be7d2 100644 (file)
@@ -2,12 +2,17 @@
 
 from koincidence import rozklad
 from ocesavac import ocesat
-from posuny import nej_posun
+from posuny import nej_posun, posun
 from spolecne import cisla_na_text
 
-def zjisti_heslo(zprava, delka_h):
+def soucet(x, y):
+    return x + y
+
+def vysledek(zprava, delka_h):
     """Najde heslo dane delky, pri jehoz aplikaci budou frekvence znaku nejlepe
     odpovidat cestine."""
     rozklady = rozklad(ocesat(zprava, False), delka_h)
     posuny = [nej_posun(text) for text in rozklady]
-    return cisla_na_text(posuny)
\ No newline at end of file
+    posunute = [''.join([posun(c, posuny[i]) for c in rozklady[i]]) for i in range(len(posuny))]
+    vysledek = [x for x  in reduce(soucet, (map(None, *posunute)[i] for i in range(len(rozklady[0])))) if x != None]
+    return cisla_na_text(posuny), ''.join(vysledek)