From: Tomas Musil Date: Mon, 18 Mar 2013 21:02:20 +0000 (+0100) Subject: funkcni rozhrani X-Git-Url: http://git.tomasm.cz/krypto.git/commitdiff_plain/e6c0c57db0cf476d985b77baa4cc51064f260961?ds=sidebyside funkcni rozhrani --- diff --git a/krypto.py b/krypto.py index deb4dc6..c0ed935 100755 --- a/krypto.py +++ b/krypto.py @@ -14,107 +14,114 @@ import posuny from spolecne import ABECEDA import vigenere -if len(sys.argv) > 1: - opsny = sys.argv[1] -else: - opsny = '' +def analyza(zprava, opsny): + analyza = [] -telo = sys.stdin.read() -zprava = telo.strip().upper() - -# Prepinani spacemodu -mod_m = False -mod_x = False -if 'X' in opsny: - mod_x = True -if 'M' in opsny: - mod_m = True -if 'A' in opsny: - mod_x = True - mod_m = True -if not mod_m and not mod_x: - if ' ' in ocesat(zprava, True)[1:-1]: + # Prepinani spacemodu + mod_m = False + mod_x = False + if 'X' in opsny: + mod_x = True + if 'M' in opsny: mod_m = True - print "Automaticky zvolena analyza s mezerami." - else: + if 'A' in opsny: mod_x = True - print "Automaticky zvolena analyza bez mezer." - -# Zakladni udaje -print "\nZakladni udaje:" -if mod_m: - print ("Delka zpravy (vcetne mezer a zvlastnich znaku: " + - str(len(zprava))) -print ("Delka zpravy (bez mezer a zvlastnich znaku): " + - str(len(ocesat(zprava, False)))) + mod_m = True + if not mod_m and not mod_x: + if ' ' in ocesat(zprava, True)[1:-1]: + mod_m = True + analyza.append("Automaticky zvolena analyza s mezerami.") + else: + mod_x = True + analyza.append("Automaticky zvolena analyza bez mezer.") + + # Zakladni udaje + analyza.append("\nZakladni udaje:") + if mod_m: + analyza.append("Delka zpravy (vcetne mezer a zvlastnich znaku: " + + str(len(zprava))) + analyza.append("Delka zpravy (bez mezer a zvlastnich znaku): " + + str(len(ocesat(zprava, False)))) + + # Prumerna delka slova + if mod_m: + analyza.append("\nPrumerna delka slova:") + slova = ocesat(zprava, True).split() + analyza.append('{0:.3}'.format(float(sum([len(word) for word in slova]))/len(slova))) -# Prumerna delka slova -if mod_m: - print "\nPrumerna delka slova:" - slova = ocesat(zprava, True).split() - print ('{0:.3}'.format(float(sum([len(word) for word in slova]))/len(slova))) + # Frekvence znaku + analyza.append("\nFrekvencni analyza:") + freq = dict() + for char in ABECEDA: + freq[char] = 0 + for char in zprava: + if char in freq: + freq[char] += 1 + celkem = sum(freq.values()) + for char in sorted(freq, key=freq.get, reverse=True): + analyza.append('{0} {1:>3} {2:>6.2%}'.format(char, freq[char], + float(freq[char])/celkem)) -# Frekvence znaku -print "\nFrekvencni analyza:" -freq = dict() -for char in ABECEDA: - freq[char] = 0 -for char in zprava: - if char in freq: - freq[char] += 1 -celkem = sum(freq.values()) -for char in sorted(freq, key=freq.get, reverse=True): - print ('{0} {1:>3} {2:>6.2%}'.format(char, freq[char], - float(freq[char])/celkem)) + # Index koincidence + if mod_m: + analyza.append("\nIndex koincidence (s mezerami):") + analyza.append('{0:.2%}'.format( + koincidence.index_koincidence(zprava, True))) + if mod_x and len(zprava) >= 30: + #TODO tady by se spravne mela porovnavat delka ocesane zpravy + analyza.append("\nIndexy koincidence (bez mezer):") + analyza.append(koincidence.tabulka_indexu(zprava)) -# Index koincidence -if mod_m: - print "\nIndex koincidence (s mezerami):" - print ('{0:.2%}'.format( - koincidence.index_koincidence(zprava, True))) -if mod_x and len(zprava) >= 30: - #TODO tady by se spravne mela porovnavat delka ocesane zpravy - print "\nIndexy koincidence (bez mezer):" - print koincidence.tabulka_indexu(zprava) + # Vigenere + if 'V' in opsny: + analyza.append("\nHeslo k Vigenerovi (" + opsny[-1] + "):") + vig_heslo, vig_text = vigenere.vsechno(zprava, int(opsny[-1])) + analyza.append(vig_heslo) + analyza.append(vig_text) -# Vigenere -if 'V' in opsny: - print "\nHeslo k Vigenerovi (" + opsny[-1] + "):" - vig_heslo, vig_text = vigenere.vsechno(zprava, int(opsny[-1])) - print vig_heslo - print vig_text + # Jakobsen + if mod_m: + analyza.append("\nJakobsen (s mezerami):") + analyza.append(jakobsen.desifruj(zprava)) + if mod_x: + analyza.append("\nJakobsen (bez mezer):") + analyza.append(jakobsen.desifruj(zprava, False)) -# Jakobsen -if mod_m: - print "\nJakobsen (s mezerami):" - print jakobsen.desifruj(zprava) -if mod_x: - print "\nJakobsen (bez mezer):" - print jakobsen.desifruj(zprava, False) + # Posuny v abecede + (posun, posunuty_text) = posuny.nejlepsi(zprava) + if 'P' in opsny or 'A' in opsny: + analyza.append("\nPosuny v abecede (nejlepsi posun {0}):".format(posun)) + analyza.append("\n".join("{0:>2} {1}".format( + i + 1, posuny.vsechny(zprava)[i]) for i in range(26))) + else: + analyza.append("\nNejlepsi posun ({0}):".format(posun)) + analyza.append(posunuty_text) + + # Bigramy + if 'B' in opsny or 'A' in opsny: + analyza.append("\nBigramy podle cetnosti:") + bigramy = dict() + for i in ABECEDA: + for j in ABECEDA: + bigramy[i+j] = 0 + for i in range(0, len(zprava)-1): + if zprava[i:i+2] in bigramy: + bigramy[zprava[i:i+2]] += 1 + celkem = sum(bigramy.values()) + for char in sorted(bigramy, key=bigramy.get, reverse=True): + if bigramy[char] == 0: + break + analyza.append('{0} {1:>3} {2:>6.2%}'.format(char, bigramy[char], + float(bigramy[char])/celkem)) + return '\n'.join(analyza) + +if __name__ == '__main__': + if len(sys.argv) > 1: + opsny = sys.argv[1] + else: + opsny = '' -# Posuny v abecede -(posun, posunuty_text) = posuny.nejlepsi(zprava) -if 'P' in opsny or 'A' in opsny: - print "\nPosuny v abecede (nejlepsi posun {0}):".format(posun) - print("\n".join("{0:>2} {1}".format( - i + 1, posuny.vsechny(zprava)[i]) for i in range(26))) -else: - print "\nNejlepsi posun ({0}):".format(posun) - print posunuty_text + telo = sys.stdin.read() + zprava = telo.strip().upper() + print(analyza(zprava, opsny)) -# Bigramy -if 'B' in opsny or 'A' in opsny: - print "\nBigramy podle cetnosti:" - bigramy = dict() - for i in ABECEDA: - for j in ABECEDA: - bigramy[i+j] = 0 - for i in range(0, len(zprava)-1): - if zprava[i:i+2] in bigramy: - bigramy[zprava[i:i+2]] += 1 - celkem = sum(bigramy.values()) - for char in sorted(bigramy, key=bigramy.get, reverse=True): - if bigramy[char] == 0: - break - print('{0} {1:>3} {2:>6.2%}'.format(char, bigramy[char], - float(bigramy[char])/celkem)) diff --git a/robot.py b/robot.py index a22a0e3..14af8ee 100755 --- a/robot.py +++ b/robot.py @@ -13,6 +13,7 @@ import pickle from ocesavac import ocesat from spolecne import ABECEDA +import krypto class settings: pass @@ -39,6 +40,7 @@ if predmet != settings.subject: sys.exit() if opsny == 'H': + #TODO dokumentace k Vigenerovi posli_mail(odesilatel, "Napoveda", ''.join(["Napoveda:\n" "Prikazy robotovi vkladejte do predmetu zpravy " "zaslane na adresu ", @@ -87,12 +89,12 @@ if len(ocesat(telo, False)) < 2: sys.exit() zprava = telo.upper() -# TODO zpracovat zpravu a odeslat vysledek -#pridat "\nS pozdravem\nVas Robot" +analyza = krypto.analyza(zprava, opsny) + posli_mail(odesilatel, "Analyza Vasi zpravy", - "\n".join(analyza), + analyza + "\nS pozdravem\nVas Robot", './robot_last.tmp') f = open('./msg_last.tmp', 'w')