Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # -*- coding: utf-8 -*-
- from Tkinter import *
- import tkMessageBox
- from string import ascii_uppercase
- okno = Tk()
- okno.title(u"Playfair šifra_Kryptologie")
- okno.resizable(False, False)
- tabulka_vypis = StringVar()
- vysledek_vypis = StringVar()
- nadpis = Label(okno, text=u"Playfair šifra", font="Arial, 20")
- nadpis.grid()
- ramec = Frame(okno)
- ramec.grid()
- nadpis_check = Label(ramec, text=u"Zvol použitu abecedu: ")
- nadpis_check.grid(row=1)
- var_aj = IntVar()
- aj_check = Checkbutton(ramec, text="AJ", variable=var_aj)
- aj_check.grid(row=2, column=0)
- var_cz = IntVar()
- cz_check = Checkbutton(ramec, text="CZ", variable=var_cz)
- cz_check.grid(row=2, column=1)
- nadpis_vstupnitext = Label(ramec, text=u"Zadej vstupní text: ")
- nadpis_vstupnitext.grid(row=4, column=0, sticky=W)
- vstupni_text = Entry(ramec, bd=5)
- vstupni_text.grid(row=4, column=1)
- nadpis_klic = Label(ramec, text=u"Zadej klíč: ")
- nadpis_klic.grid(row=5, column=0, sticky=W)
- klic = Entry(ramec, bd=5)
- klic.grid(row=5, column=1)
- class Tabulka:
- def __init__(self, klic, typ):
- self.velikost = 5
- self.matice = list()
- unikatni_klic = []
- [unikatni_klic.append(x.upper()) for x in klic if x.upper() not in unikatni_klic]
- abeceda = list(ascii_uppercase)
- for znak in unikatni_klic:
- abeceda.remove(znak)
- if typ == "en":
- abeceda.remove("J")
- elif typ == "cz":
- abeceda.remove("W")
- pismena = unikatni_klic
- pismena.extend(abeceda)
- for y in range(0, self.velikost):
- self.matice.append(list())
- for x in range(0, self.velikost):
- self.matice[y].append(pismena[y * self.velikost + x])
- def pismeno(self, p):
- for y in range(0, self.velikost):
- for x in range(0, self.velikost):
- if self.matice[y][x] == p:
- return x, y
- def pismeno_na_souradnce(self, x, y):
- return self.matice[y][x]
- a = Tabulka("kolotoc", "cz")
- def sifrovani():
- delka = len(vstupni_text.get())
- delka_klice = len(klic.get())
- anglicka_verze = var_aj.get() == 1
- ceska_verze = var_cz.get() == 1
- typ = ""
- if delka != 0 and delka_klice != 0:
- vstup = vstupni_text.get().upper().replace(" ","MEZE")
- if anglicka_verze and (not ceska_verze):
- """nahrazení j za i"""
- typ = "en"
- vstup=vstup.replace("J","I")
- elif ceska_verze and (not anglicka_verze):
- typ = "cz"
- vstup=vstup.replace("W","V")
- else:
- tkMessageBox.showinfo("Chyba", "Byly zadany spatne vstupni parametry!")
- return
- """sifrovani"""
- tabulka_pismen = Tabulka(klic.get(), typ)
- vysledek = []
- for znak in ascii_uppercase:
- vstup = vstup.replace(znak + znak, znak + "X" + znak)
- if len(vstup) % 2 == 1:
- if vstup[-1] == "X":
- vstup = vstup + "QXQ"
- else:
- vstup = vstup + "X"
- for i, znak in enumerate(vstup):
- if i % 2 == 0:
- x1, y1 = tabulka_pismen.pismeno(znak)
- x2, y2 = tabulka_pismen.pismeno(vstup[i + 1])
- if y1 == y2:
- vysledek.append(tabulka_pismen.pismeno_na_souradnce((x1 + 1) % tabulka_pismen.velikost, y2))
- vysledek.append(tabulka_pismen.pismeno_na_souradnce((x2 + 1) % tabulka_pismen.velikost, y1))
- if x1 == x2:
- vysledek.append(tabulka_pismen.pismeno_na_souradnce(x1, (y1 + 1) % tabulka_pismen.velikost))
- vysledek.append(tabulka_pismen.pismeno_na_souradnce(x2, (y2 + 1) % tabulka_pismen.velikost))
- else:
- vysledek.append(tabulka_pismen.pismeno_na_souradnce(x2, y1))
- vysledek.append(tabulka_pismen.pismeno_na_souradnce(x1, y2))
- textovy_vysledek = []
- for i, znak in enumerate(vysledek):
- if i % 5 == 0 and i != 0:
- textovy_vysledek.append(" ")
- textovy_vysledek.append(znak)
- if len(vysledek) % 5 != 0:
- textovy_vysledek.extend(list(("X" * (5- (len(vysledek) % 5)))))
- print "".join(textovy_vysledek)
- vypis="".join(textovy_vysledek)
- return vysledek_vypis.set(vypis)
- else:
- tkMessageBox.showinfo("Chyba", "Byly zadany spatne vstupni parametry!")
- def desifrovani():
- delka = len(vstupni_text.get())
- delka_klice = len(klic.get())
- anglicka_verze = var_aj.get() == 1
- ceska_verze = var_cz.get() == 1
- typ = ""
- if delka != 0 and delka_klice != 0:
- vstup = vstupni_text.get().upper()
- if anglicka_verze and (not ceska_verze):
- """nahrazení j za i"""
- typ = "en"
- elif ceska_verze and (not anglicka_verze):
- typ = "cz"
- else:
- tkMessageBox.showinfo("Chyba", "Byly zadany spatne vstupni parametry!")
- return
- """desifrovani"""
- tabulka_pismen = Tabulka(klic.get(), typ)
- vysledek = []
- for i, znak in enumerate(vstup):
- if i % 2 == 0:
- x1, y1 = tabulka_pismen.pismeno(znak)
- x2, y2 = tabulka_pismen.pismeno(vstup[i + 1])
- if y1 == y2:
- vysledek.append(tabulka_pismen.pismeno_na_souradnce((x1 - 1) % tabulka_pismen.velikost, y2))
- vysledek.append(tabulka_pismen.pismeno_na_souradnce((x2 - 1) % tabulka_pismen.velikost, y1))
- if x1 == x2:
- vysledek.append(tabulka_pismen.pismeno_na_souradnce(x1, (y1 - 1) % tabulka_pismen.velikost))
- vysledek.append(tabulka_pismen.pismeno_na_souradnce(x2, (y2 - 1) % tabulka_pismen.velikost))
- else:
- vysledek.append(tabulka_pismen.pismeno_na_souradnce(x2, y1))
- vysledek.append(tabulka_pismen.pismeno_na_souradnce(x1, y2))
- print "".join(vysledek).replace("MEZE", " ")
- vypis="".join(vysledek).replace("MEZE", " ")
- return vysledek_vypis.set(vypis)
- reseni=""
- for radek in tabulka_pismen.matice:
- reseni=reseni +"".join(radek) + "\n"
- print res
- return tabulka_vypis.set(reseni)
- else:
- tkMessageBox.showinfo("Chyba", "Byly zadany spatne vstupni parametry!")
- ramec_tlacitka = Frame(okno)
- ramec_tlacitka.grid()
- tlac_zasifrovat = Button(ramec_tlacitka, text="Zasifrovat", command=sifrovani)
- tlac_zasifrovat.grid(row=6, column=0)
- tlac_desifrovat = Button(ramec_tlacitka, text="Desifrovat", command=desifrovani)
- tlac_desifrovat.grid(row=6, column=1)
- label_vypistabulky = LabelFrame(okno, text=u"Šifrovací/dešifrovací tabulka", bd=5)
- label_vypistabulky.grid(row=8, sticky=W + E)
- text = Label(label_vypistabulky, textvariable=tabulka_vypis)
- text.grid(padx=5, pady=10)
- label_vypisvysledku = LabelFrame(okno, text=u"Vysledek šifrování/dešifrování: ", bd=5)
- label_vypisvysledku.grid(row=7, sticky=W + E)
- text_vysledek = Label(label_vypisvysledku, textvariable=vysledek_vypis)
- text_vysledek.grid(padx=5, pady=10)
- okno.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement