# coding=utf-8 from Tkinter import * from tkFileDialog import * import paszi import tkMessageBox import os class MainWin(Frame): def __init__(self, master): Frame.__init__(self, master) self.master = master self.master.title('RSA program') self.master.geometry("500x450+450+100") self.master.minsize(500, 450) self.file_enter = Entry(font="Arial 16") self.file_enter.pack(side='top') self.file_input = StringVar() self.file_enter["textvariable"] = self.file_input self.a = [] self.b = [] self.file_button = Button(self.master, text=u'Загрузить файл', font="Arial 16") self.file_button.pack(side='top') self.file_button.bind('', lambda _: self.a.append(self.open_file(1))) self.chose_label = Label(self.master, text=u'Что вы хотите сделать с файлом?', font="Arial 16") self.chose_label.pack(side='top') self.var = IntVar() self.enc_button = Radiobutton(self.master, text='Зашифровать', variable=self.var, value=1, font="Arial 16") self.dec_button = Radiobutton(self.master, text='Расшифровать', variable=self.var, value=2, font="Arial 16") self.enc_button.pack(side='top') self.dec_button.pack(side='top') self.enc_button['command'] = self.encrypt_place self.dec_button['command'] = self.decrypt_place self.op_key_enter = Entry(font="Arial 16") self.sec_key_enter = Entry(font="Arial 16") self.key_label = Label(self.master, text=u"Введите ключ", font="Arial 16") self.sec_key_btn = Button(self.master, text=u'Загрузить ключ', font="Arial 16") self.sec_key_btn.bind('', lambda _: self.a.append(self.open_file(2))) self.sec_key = StringVar() self.sec_key_enter["textvariable"] = self.sec_key self.op_key = StringVar() self.op_key_enter["textvariable"] = self.op_key self.save_d_enter = Entry(font="Arial 16") self.save_d = StringVar() self.save_d_enter["textvariable"] = self.save_d self.save_d_btn = Button(self.master, text=u'Выберите куда сохранить секретный ключ', font="Arial 16") self.save_d_btn.bind('', lambda _: self.b.append(self.save_file(1))) self.save_file_enter = Entry(font="Arial 16") self.save_file_ = StringVar() self.save_file_enter["textvariable"] = self.save_file_ self.save_file_btn = Button(self.master, text=u'Выберите куда сохранить результат', font="Arial 16") self.save_file_btn.bind('', lambda _: self.b.append(self.save_file(2))) self.start = Button(self.master, text=u'Начать', font="Arial 16") self.start.pack(side='bottom') self.save_file_btn.pack(side='bottom') self.save_file_enter.pack(side='bottom') self.P = 127 self.Q = 109 self.F = paszi.gen_f(self.P, self.Q) self.N = int(paszi.gen_n(self.P, self.Q)) self.master.mainloop() def open_file(self, i): filename = askopenfilename() if filename == '': tkMessageBox.showinfo("Oops", "Wrong file name", font="Arial 16") if i == 1: self.file_input.set(filename) if i == 2: self.sec_key.set(filename) return filename def save_file(self, i): filename = asksaveasfilename() if filename == '': tkMessageBox.showinfo("Oops", "Wrong file name", font="Arial 16") if i == 1: d = paszi.multiple_inv(int(self.op_key.get()), self.N) f = open(filename, "w") f.write(str(d)) f.close() self.save_d.set(filename) if i == 2: self.save_file_.set(filename) return filename def encrypt_place(self): self.sec_key_btn.pack_forget() self.sec_key_enter.pack_forget() self.op_key_enter.pack(side='top') self.key_label.pack(side='top') self.save_d_enter.pack(side='top') self.save_d_btn.pack(side='top') self.start['command'] = self.encrypt_file def decrypt_place(self): self.op_key_enter.pack_forget() self.key_label.pack_forget() self.save_d_btn.pack_forget() self.save_d_enter.pack_forget() self.sec_key_enter.pack(side='top') self.sec_key_btn.pack(side='top') self.start['command'] = self.decrypt_file def encrypt_file(self): #try: if (int(self.op_key.get()) < self.F) & (int(self.F) % int(self.op_key.get()) != 0): if os.path.exists(self.a[0]): paszi.encrypt(self.a[0], self.op_key.get(), self.N) tkMessageBox.showinfo("Encrypting", "Successful!") else: tkMessageBox.showinfo("ERROR", "Wrong file name") else: tkMessageBox.showinfo("ERROR", "Wrong open key") #except Exception: # tkMessageBox.showinfo("ERROR", "Something wrong") def decrypt_file(self): #try: f = open(self.a[1], 'r') secret_key = int(f.read()) if os.path.exists(self.a[1]) & os.path.exists(self.a[0]): paszi.decrypt(self.a[0], secret_key, self.N) tkMessageBox.showinfo("Decrypting", "Successful!") else: tkMessageBox.showinfo("ERROR", "Wrong file name") #except Exception: #tkMessageBox.showinfo("ERROR", "Something wrong") root = Tk() MainWin(root)