美文网首页
一个py编写的密码学集成工具

一个py编写的密码学集成工具

作者: ylylhl | 来源:发表于2018-07-09 16:33 被阅读0次

一只夜目发出了咕咕咕的声音(
熬了几天夜搞定了……
老师:啥,这还用熬夜
我:(丢人.jpg)
有一些检测没写,考完再说8

界面效果

懒得改了!就这样吧(……)除了古典密码基本都是废的(
实名diss自带的tkinter。
链接:https://pan.baidu.com/s/1YY6DMN-_n9Qb5fVpMP6HzQ 密码:z53y

部分代码

#coding = utf-8
'''
●Affine v1.0

作者:Kadoya
创建时间:18.2.25
最近修改:18.7.5

①函数重构以适应界面需要

'''
def findmodinverse(a,m):
    u1,u2,u3 = 1,0,a
    v1,v2,v3 = 0,1,m
    while v3 !=0:
        q = u3 // v3
        v1,v2,v3,u1,u2,u3 = (u1-q*v1),(u2-q*v2),(u3-q*v3),v1,v2,v3
    return u1%m

def en(mess,k1,k2):
    lett='abcdefghijklmnopqrstuvwxyz'
    translated=''
    for i in mess:
        a=lett[(lett.index(i.lower())*k1+k2)%26]
        if i in lett:
            translated+=a
        else:
            translated+=a.upper()
    return translated

def de(mess,k1,k2):
    lett='abcdefghijklmnopqrstuvwxyz'
    invk1=findmodinverse(k1,26)
    translated=''
    for i in mess:
        a=lett[invk1*(lett.index(i.lower())-k2)%26]
        if i in lett:
            translated+=a
        else:
            translated+=a.upper()
    return translated
'''
●Vigenere v1.0

作者:Kadoya
创建时间:17.12.8
最近修改:18.3.15


①修正对明/密文中数字的兼容性
②函数重构以适应界面需要

'''
def en(mess,key):
    letter='abcdefghijklmnopqrstuvwxyz'
    translated = ''
    for i in range(len(mess)):
        j = i % len(key)
        k = letter.index(key[j])
        try:
            m = letter.index(mess[i])
        except:
            translated += mess[i]
            key=key[-1]+key[:-1]
            continue
        translated += letter[(m+k)%26]
    return translated

def de(mess,key):
    letter='abcdefghijklmnopqrstuvwxyz'
    translated = ''
    for i in range(len(mess)):
        j = i % len(key)
        k = letter.index(key[j])
        try:
            m = letter.index(mess[i])
        except:
            translated += mess[i]
            key=key[-1]+key[:-1]
            continue
        if m < k:
            m += 26
        translated += letter[m-k]
    return translated
#coding = utf-8
'''
●Hill v1.0

作者:Kadoya
创建时间:18.3.31
最近修改:18.7.5

①函数重构以适应界面需要

'''
from math import *
import numpy as np

def mod(x,y,z):
    while x%y!=0:
        x+=z
    return int(x/y%z)

def mult(letter,mat,key):#求矩阵乘
    return [letter[sum((i*j)for i,j in zip(c,d))%26] for c in mat for d in key]

def en(mess,k):
    letter='abcdefghijklmnopqrstuvwxyz'
    mess=[letter.index(i) for i in mess.replace(' ','')]
    k=[int(i)for i in k.split(' ')]
    a=sqrt(len(k))
    if a%1!=0:
        return 'error'
    a=int(a)#矩阵阶数
    if len(mess)%a!=0:
        mess+=[letter.index('e') for i in range(a-len(mess)%a)]#填充约定字符
    mat=[[]]*ceil(len(mess)/a)
    for i in range(ceil(len(mess)/a)):
        mat[i]=mess[a*i:a*(i+1)]#文本矩阵
    key=[k[i::a] for i in range(a)]#密钥矩阵,为了算的时候方便竖着来的
    translated=''.join(mult(letter,mat,key))#计算
    return translated

def de(mess,k):
    letter='abcdefghijklmnopqrstuvwxyz'
    mess=[letter.index(i) for i in mess]
    k=[int(i)for i in k.split(' ')]
    a=sqrt(len(k))#矩阵阶数
    if a%1!=0:
        return 'error'
    a=int(a)
    mat=[[]]*ceil(len(mess)/a)
    for i in range(ceil(len(mess)/a)):
        mat[i]=mess[a*i:a*(i+1)]#文本矩阵
    key=[k[a*i:a*(i+1)] for i in range(a)]
    getdet=round(np.linalg.det(key))#计算det(k)的值
    k2=[]
    for i in range(a):
        for j in range(a):
            t=key[0:j]+key[j+1:]
            t=[t[b][0:i]+t[b][i+1:] for b in range(len(t))]#拿到子矩阵
            c=int(((-1)**(i+j+2))*round(np.linalg.det(t))%26)
            k2.append(c)
    k2=[mod(k2[i],getdet,26)for i in range(len(k2))]
    key=[k2[i::a] for i in range(a)]#密钥矩阵,为了算的时候方便竖着来的
    translated=''.join(mult(letter,mat,key))#计算
    return translated

#print (en('pay more money','17 17 5 21 18 21 2 2 19'))
#print (de('rrlmwbkaspdh','17 17 5 21 18 21 2 2 19'))
'''
一个窗口
ver0.2 update 18.3.15
ver0.5 update 18.7.7

Kadoya
'''
from tkinter import *
from tkinter import ttk
import caesar
import affine
import playfair
import vigenere
import hill
import aes
import DES
import RSA
import ELGamal
import SHA1
import rc4


def allclear():
    for i in f1.grid_slaves():
        i.grid_forget()
    for i in f2.grid_slaves():
        i.grid_forget()
    if len(root.grid_slaves())!=3:
        a=root.grid_slaves()[-1]
        a.grid_forget()
        flag=1

def CaesarTK():
    def caesarF():
        v=var.get()
        src = init_data_Text.get(1.0,END).strip().replace("\n","")
        key = key_data_Text.get(1.0,END).strip().replace("\n","")
        if src and key:
            try:
                if v==0:
                    mess=caesar.en(src,key)
                else:
                    mess=caesar.de(src,key)
                #输出到界面
                result_data_Text.delete(1.0,END)
                result_data_Text.insert(1.0,mess)
            except:
                result_data_Text.delete(1.0,END)
                result_data_Text.insert(1.0,"突然失败不知所措,检查一下函数吧")
        else:
            result_data_Text.delete(1.0,END)
            if v == 0:
                result_data_Text.insert(1.0,"ERROR:caesar_encode failed")
            else:
                result_data_Text.insert(1.0,"ERROR:caesar_decode failed")

    allclear()
    #标签
    init_label = Label(f1, text="文本(c/m):")
    init_label.grid(row=0, column=0,sticky=W)
    key_label = Label(f1, text="密钥(k):")
    key_label.grid(row=6, column=0,sticky=W)
    result_label = Label(f1, text="结果(m/c):")
    result_label.grid(row=8, column=0,sticky=W)

    #文本框
    init_data_Text = Text(f1, width=60, height=6)  #原始数据录入框
    init_data_Text.grid(row=1, column=0,columnspan=4,rowspan=5,sticky=W)
    key_data_Text = Text(f1, width=60, height=1)  # 密钥
    key_data_Text.grid(row=7, column=0,columnspan=4,rowspan=1,sticky=W)
    result_data_Text = Text(f1, width=60, height=6)  #处理结果展示
    result_data_Text.grid(row=9, column=0,columnspan=4,rowspan=5,sticky=W)
    #按钮
    Caesar_button = Button(f2, text="Caesar Go!", width=10,command=caesarF)
    Caesar_button.grid(row=0,padx=15,pady=15)
    #复选框
    var = IntVar()
    checkbutton = Checkbutton(f2, text='decode', variable=var)
    checkbutton.grid(row=9)

def AffineTK():
    def affineF():
        v=var.get()
        src = init_data_Text.get(1.0,END).strip().replace("\n","")
        key1=k1.get()
        key2=k2.get()
        if src and key1:
            try:
                if v==0:
                    mess=affine.en(src,key1,key2)
                else:
                    mess=affine.de(src,key1,key2)
                #输出到界面
                result_data_Text.delete(1.0,END)
                #print(mess)
                result_data_Text.insert(1.0,mess)
            except:
                result_data_Text.delete(1.0,END)
                result_data_Text.insert(1.0,"突然失败不知所措,检查一下函数吧")
        else:
            result_data_Text.delete(1.0,END)
            if v == 0:
                result_data_Text.insert(1.0,"ERROR:affine_encode failed")
            else:
                result_data_Text.insert(1.0,"ERROR:affine_decode failed")

    allclear()
    #标签
    init_label = Label(f1, text="文本(c/m):")
    init_label.grid(row=0, column=0,sticky=W)
    key_label = Label(f1, text="密钥(k1):")
    key_label.grid(row=6, column=0)
    key_label = Label(f1, text="密钥(k2):")
    key_label.grid(row=6, column=2)
    result_label = Label(f1, text="结果(m/c):")
    result_label.grid(row=8, column=0,sticky=W)

    #文本框
    init_data_Text = Text(f1, width=60, height=6)  #原始数据录入框
    init_data_Text.grid(row=1, column=0,columnspan=4,rowspan=5,sticky=W)
    k1 = IntVar()#key1
    k1Chosen = ttk.Combobox(f1, width=12, textvariable=k1)
    k1Chosen['values'] = (3,5,7,9,11,15,17,19,21,23,25)
    k1Chosen.grid(column=0, row=7)
    k1Chosen.current(0) 
    k2 = IntVar()#key2
    k2Chosen = ttk.Combobox(f1, width=12, textvariable=k2)
    k2Chosen['values'] = (0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25)
    k2Chosen.grid(column=2, row=7)
    k2Chosen.current(0)
    result_data_Text = Text(f1, width=60, height=6)  #处理结果展示
    result_data_Text.grid(row=9, column=0,columnspan=4,rowspan=5,sticky=W)
    #按钮
    Caesar_button = Button(f2, text="Affine Go!", width=10,command=affineF)
    Caesar_button.grid(row=0,padx=15,pady=15)
    #复选框
    var = IntVar()
    checkbutton = Checkbutton(f2, text='decode', variable=var)
    checkbutton.grid(row=9)

def PlayfairTK():
    def playfairF():
        v=var.get()
        src = init_data_Text.get(1.0,END).strip().replace("\n","")
        key = key_data_Text.get(1.0,END).strip().replace("\n","")
        if src and key:
            try:
                mess=playfair.main(src,key,v)
                #输出到界面
                result_data_Text.delete(1.0,END)
                result_data_Text.insert(1.0,mess)
            except:
                result_data_Text.delete(1.0,END)
                result_data_Text.insert(1.0,"突然失败不知所措,检查一下函数吧")
        else:
            result_data_Text.delete(1.0,END)
            if v == 0:
                result_data_Text.insert(1.0,"ERROR:playfair_encode failed")
            else:
                result_data_Text.insert(1.0,"ERROR:playfair_decode failed")

    allclear()
    #标签
    init_label = Label(f1, text="文本(c/m):")
    init_label.grid(row=0, column=0,sticky=W)
    key_label = Label(f1, text="密钥(k):")
    key_label.grid(row=6, column=0,sticky=W)
    result_label = Label(f1, text="结果(m/c):")
    result_label.grid(row=8, column=0,sticky=W)

    #文本框
    init_data_Text = Text(f1, width=60, height=6)  #原始数据录入框
    init_data_Text.grid(row=1, column=0,columnspan=4,rowspan=5,sticky=W)
    key_data_Text = Text(f1, width=60, height=1)  # 密钥
    key_data_Text.grid(row=7, column=0,columnspan=4,rowspan=1,sticky=W)
    result_data_Text = Text(f1, width=60, height=6)  #处理结果展示
    result_data_Text.grid(row=9, column=0,columnspan=4,rowspan=5,sticky=W)
    #按钮
    Caesar_button = Button(f2, text="Playfair Go!", width=10,command=playfairF)
    Caesar_button.grid(row=0,padx=15,pady=15)
    #复选框
    var = IntVar()
    checkbutton = Checkbutton(f2, text='decode', variable=var)
    checkbutton.grid(row=9)

def VigenereTK():
    def vigenereF():
        v=var.get()
        src = init_data_Text.get(1.0,END).strip().replace("\n","")
        key = key_data_Text.get(1.0,END).strip().replace("\n","")
        if src and key:
            try:
                if v==0:
                    mess=vigenere.en(src,key)
                else:
                    mess=vigenere.de(src,key)
                #输出到界面
                result_data_Text.delete(1.0,END)
                result_data_Text.insert(1.0,mess)
            except:
                result_data_Text.delete(1.0,END)
                result_data_Text.insert(1.0,"突然失败不知所措,检查一下函数吧")
        else:
            result_data_Text.delete(1.0,END)
            if v == 0:
                result_data_Text.insert(1.0,"ERROR:playfair_encode failed")
            else:
                result_data_Text.insert(1.0,"ERROR:playfair_decode failed")

    allclear()
    #标签
    init_label = Label(f1, text="文本(c/m):")
    init_label.grid(row=0, column=0,sticky=W)
    key_label = Label(f1, text="密钥(k):")
    key_label.grid(row=6, column=0,sticky=W)
    result_label = Label(f1, text="结果(m/c):")
    result_label.grid(row=8, column=0,sticky=W)

    #文本框
    init_data_Text = Text(f1, width=60, height=6)  #原始数据录入框
    init_data_Text.grid(row=1, column=0,columnspan=4,rowspan=5,sticky=W)
    key_data_Text = Text(f1, width=60, height=1)  # 密钥
    key_data_Text.grid(row=7, column=0,columnspan=4,rowspan=1,sticky=W)
    result_data_Text = Text(f1, width=60, height=6)  #处理结果展示
    result_data_Text.grid(row=9, column=0,columnspan=4,rowspan=5,sticky=W)
    #按钮
    Caesar_button = Button(f2, text="Vigenere Go!", width=10,command=vigenereF)
    Caesar_button.grid(row=0,padx=15,pady=15)
    #复选框
    var = IntVar()
    checkbutton = Checkbutton(f2, text='decode', variable=var)
    checkbutton.grid(row=9)

def HillTK():
    def hillF():
        v=var.get()
        src = init_data_Text.get(1.0,END).strip().replace("\n","")
        key = key_data_Text.get(1.0,END).strip().replace("\n","")
        if src and key:
            try:
                if v==0:
                    mess=hill.en(src,key)
                else:
                    mess=hill.de(src,key)
                #输出到界面
                result_data_Text.delete(1.0,END)
                result_data_Text.insert(1.0,mess)
            except:
                result_data_Text.delete(1.0,END)
                result_data_Text.insert(1.0,"突然失败不知所措,检查一下函数吧")
        else:
            result_data_Text.delete(1.0,END)
            if v == 0:
                result_data_Text.insert(1.0,"ERROR:hill_encode failed")
            else:
                result_data_Text.insert(1.0,"ERROR:hill_decode failed")

    allclear()
    #标签
    init_label = Label(f1, text="文本(c/m):")
    init_label.grid(row=0, column=0,sticky=W)
    key_label = Label(f1, text="密钥,以空格隔开(k):")
    key_label.grid(row=6, column=0,sticky=W)
    result_label = Label(f1, text="结果(m/c):")
    result_label.grid(row=8, column=0,sticky=W)

    #文本框
    init_data_Text = Text(f1, width=60, height=6)  #原始数据录入框
    init_data_Text.grid(row=1, column=0,columnspan=4,rowspan=5,sticky=W)
    key_data_Text = Text(f1, width=60, height=1)  # 密钥
    key_data_Text.grid(row=7, column=0,columnspan=4,rowspan=1,sticky=W)
    result_data_Text = Text(f1, width=60, height=6)  #处理结果展示
    result_data_Text.grid(row=9, column=0,columnspan=4,rowspan=5,sticky=W)
    #按钮
    Caesar_button = Button(f2, text="Hill Go!", width=10,command=hillF)
    Caesar_button.grid(row=0,padx=15,pady=15)
    #复选框
    var = IntVar()
    checkbutton = Checkbutton(f2, text='decode', variable=var)
    checkbutton.grid(row=9)

def AesTK():
    def aesF():
        v=var.get()
        src = init_data_Text.get(1.0,END).strip().replace("\n","")
        key = key_data_Text.get(1.0,END).strip().replace("\n","")
        if src and key:
            try:
                if v==0:
                    mess=aes.en(src,key)
                else:
                    mess=aes.de(src,key)
                #输出到界面
                result_data_Text.delete(1.0,END)
                result_data_Text.insert(1.0,mess)
            except:
                result_data_Text.delete(1.0,END)
                result_data_Text.insert(1.0,"突然失败不知所措,检查一下函数吧")
        else:
            result_data_Text.delete(1.0,END)
            if v == 0:
                result_data_Text.insert(1.0,"ERROR:AES_encode failed")
            else:
                result_data_Text.insert(1.0,"ERROR:AES_decode failed")

    allclear()
    #标签
    init_label = Label(f1, text="文本(c/m):")
    init_label.grid(row=0, column=0,sticky=W)
    key_label = Label(f1, text="密钥(k):")
    key_label.grid(row=5, column=0,sticky=W)
    result_label = Label(f1, text="结果(m/c):")
    result_label.grid(row=8, column=0,sticky=W)

    #文本框
    init_data_Text = Text(f1, width=60, height=6)  #原始数据录入框
    init_data_Text.grid(row=1, column=0,columnspan=4,rowspan=4,sticky=W)
    key_data_Text = Text(f1, width=60, height=1)  # 密钥
    key_data_Text.grid(row=6, column=0,columnspan=4,rowspan=2,sticky=W)
    result_data_Text = Text(f1, width=60, height=6)  #处理结果展示
    result_data_Text.grid(row=9, column=0,columnspan=4,rowspan=5,sticky=W)
    #按钮
    GObutton = Button(f2, text="AES Go!", width=10,command=aesF)
    GObutton.grid(row=0,padx=15,pady=15)
    #复选框
    var = IntVar()
    checkbutton = Checkbutton(f2, text='decode', variable=var)
    checkbutton.grid(row=9)

def DesTK():
    def desF():
        v=var.get()
        src = init_data_Text.get(1.0,END).strip().replace("\n","")
        key = key_data_Text.get(1.0,END).strip().replace("\n","")
        if src and key:
            try:
                if v==0:
                    mess=DES.en(src,key)
                else:
                    mess=DES.de(src,key)
                #输出到界面
                result_data_Text.delete(1.0,END)
                result_data_Text.insert(1.0,mess)
            except:
                result_data_Text.delete(1.0,END)
                result_data_Text.insert(1.0,"突然失败不知所措,检查一下函数吧")
        else:
            result_data_Text.delete(1.0,END)
            if v == 0:
                result_data_Text.insert(1.0,"ERROR:DES_encode failed")
            else:
                result_data_Text.insert(1.0,"ERROR:DES_decode failed")

    allclear()
    #标签
    init_label = Label(f1, text="文本(c/m):")
    init_label.grid(row=0, column=0,sticky=W)
    key_label = Label(f1, text="密钥(k):")
    key_label.grid(row=5, column=0,sticky=W)
    result_label = Label(f1, text="结果(m/c):")
    result_label.grid(row=8, column=0,sticky=W)

    #文本框
    init_data_Text = Text(f1, width=60, height=6)  #原始数据录入框
    init_data_Text.grid(row=1, column=0,columnspan=4,rowspan=4,sticky=W)
    key_data_Text = Text(f1, width=60, height=1)  # 密钥
    key_data_Text.grid(row=6, column=0,columnspan=4,rowspan=2,sticky=W)
    result_data_Text = Text(f1, width=60, height=6)  #处理结果展示
    result_data_Text.grid(row=9, column=0,columnspan=4,rowspan=5,sticky=W)
    #按钮
    GObutton = Button(f2, text="DES Go!", width=10,command=desF)
    GObutton.grid(row=0,padx=15,pady=15)
    #复选框
    var = IntVar()
    checkbutton = Checkbutton(f2, text='decode', variable=var)
    checkbutton.grid(row=9)

def RsaTK():
    def rsaF():
        v=var.get()
        src = init_data_Text.get(1.0,END).strip().replace("\n","")
        p = int(p_Text.get(1.0,END).strip().replace("\n",""))
        q = int(q_Text.get(1.0,END).strip().replace("\n",""))
        e = int(e_Text.get(1.0,END).strip().replace("\n",""))
        print(p,'\n',q,'\n',e)
        if src and p and q and e:
            try:
                if v==0:
                    mess=RSA.en(p,q,e,src)
                else:
                    src=int(src)
                    mess=RSA.de(p,q,e,src)
                #输出到界面
                result_data_Text.delete(1.0,END)
                result_data_Text.insert(1.0,mess)
            except:
                result_data_Text.delete(1.0,END)
                result_data_Text.insert(1.0,"突然失败不知所措,检查一下函数吧")
        else:
            result_data_Text.delete(1.0,END)
            if v == 0:
                result_data_Text.insert(1.0,"ERROR:RSA_encode failed")
            else:
                result_data_Text.insert(1.0,"ERROR:RSA_decode failed")

    allclear()
    #标签
    init_label = Label(f1, text="文本(c/m):")
    init_label.grid(row=0, column=0,sticky=W)
    p_label = Label(f1, text="密钥(p):")
    p_label.grid(row=5, column=0,sticky=W)
    q_label = Label(f1, text="密钥(q):")
    q_label.grid(row=5, column=1,sticky=W)
    e_label = Label(f1, text="密钥(e):")
    e_label.grid(row=5, column=2,sticky=W)
    result_label = Label(f1, text="结果(m/c):")
    result_label.grid(row=8, column=0,sticky=W)

    #文本框
    init_data_Text = Text(f1, width=60, height=6)  #原始数据录入框
    init_data_Text.grid(row=1, column=0,columnspan=4,rowspan=3,sticky=W)
    p_Text = Text(f1, width=12, height=1)  # 密钥
    p_Text.grid(row=6, column=0,columnspan=4,rowspan=2,sticky=W)
    q_Text = Text(f1, width=12, height=1)  # 密钥
    q_Text.grid(row=6, column=1,columnspan=4,rowspan=2,sticky=W)
    e_Text = Text(f1, width=12, height=1)  # 密钥
    e_Text.grid(row=6, column=2,columnspan=4,rowspan=2,sticky=W)
    result_data_Text = Text(f1, width=60, height=6)  #处理结果展示
    result_data_Text.grid(row=9, column=0,columnspan=4,rowspan=5,sticky=W)
    #按钮
    GObutton = Button(f2, text="RSA Go!", width=10,command=rsaF)
    GObutton.grid(row=0,padx=15,pady=15)
    #复选框
    var = IntVar()
    checkbutton = Checkbutton(f2, text='decode', variable=var)
    checkbutton.grid(row=9)

def ELGamalTK():
    def elgamalF():
        v=var.get()
        src = init_data_Text.get(1.0,END).strip().replace("\n","")
        x = int(x_Text.get(1.0,END).strip().replace("\n",""))
        p = int(p_Text.get(1.0,END).strip().replace("\n",""))
        g = int(g_Text.get(1.0,END).strip().replace("\n",""))
        if src and x and p and g:
            try:
                if v==0:
                    src=int(src)
                    mess=ELGamal.en(src,x,p,g)
                else:
                    c1,c2=src.split(' ')
                    c1,c2=int(c1),int(c2)
                    mess=ELGamal.de(c1,c2,x,p)
                #输出到界面
                result_data_Text.delete(1.0,END)
                result_data_Text.insert(1.0,mess)
            except:
                result_data_Text.delete(1.0,END)
                result_data_Text.insert(1.0,"突然失败不知所措,检查一下函数吧")
        else:
            result_data_Text.delete(1.0,END)
            if v == 0:
                result_data_Text.insert(1.0,"ERROR:ELGamal_encode failed")
            else:
                result_data_Text.insert(1.0,"ERROR:ELGamal_decode failed")

    allclear()
    #标签
    init_label = Label(f1, text="文本(c/m):")
    init_label.grid(row=0, column=0,sticky=W)
    x_label = Label(f1, text="私钥(x):")
    x_label.grid(row=5, column=0,sticky=W)
    p_label = Label(f1, text="参数(p):")
    p_label.grid(row=5, column=1,sticky=W)
    g_label = Label(f1, text="生成元(g):")
    g_label.grid(row=5, column=2,sticky=W)
    result_label = Label(f1, text="结果(m/c):")
    result_label.grid(row=8, column=0,sticky=W)

    #文本框
    init_data_Text = Text(f1, width=60, height=6)  #原始数据录入框
    init_data_Text.grid(row=1, column=0,columnspan=4,rowspan=4,sticky=W)
    x_Text = Text(f1, width=12, height=1)  # 密钥
    x_Text.grid(row=6, column=0,columnspan=4,rowspan=2,sticky=W)
    p_Text = Text(f1, width=12, height=1)  # 密钥
    p_Text.grid(row=6, column=1,columnspan=4,rowspan=2,sticky=W)
    g_Text = Text(f1, width=12, height=1)  # 密钥
    g_Text.grid(row=6, column=2,columnspan=4,rowspan=2,sticky=W)
    result_data_Text = Text(f1, width=60, height=6)  #处理结果展示
    result_data_Text.grid(row=9, column=0,columnspan=4,rowspan=5,sticky=W)
    #按钮
    GObutton = Button(f2, text="ELGamal Go!", width=10,command=elgamalF)
    GObutton.grid(row=0,padx=15,pady=15)
    #复选框
    var = IntVar()
    checkbutton = Checkbutton(f2, text='decode', variable=var)
    checkbutton.grid(row=9)

def Sha1TK():
    def sha1F():
        src = init_data_Text.get(1.0,END).strip().replace("\n","")
        if src:
            try:
                mess=SHA1.en(src)
                #输出到界面
                result_data_Text.delete(1.0,END)
                result_data_Text.insert(1.0,mess)
            except:
                result_data_Text.delete(1.0,END)
                result_data_Text.insert(1.0,"突然失败不知所措,检查一下函数吧")
        else:
            result_data_Text.delete(1.0,END)
            result_data_Text.insert(1.0,"ERROR:SHA-1_encode failed")
            
    allclear()
    #标签
    init_label = Label(f1, text="文本(c/m):")
    init_label.grid(row=0, column=0,sticky=W)
    result_label = Label(f1, text="结果(m/c):")
    result_label.grid(row=7, column=0,sticky=W)

    #文本框
    init_data_Text = Text(f1, width=60, height=7)  #原始数据录入框
    init_data_Text.grid(row=1, column=0,columnspan=4,rowspan=6,sticky=W)
    result_data_Text = Text(f1, width=60, height=8)  #处理结果展示
    result_data_Text.grid(row=9, column=0,columnspan=4,rowspan=6,sticky=W)
    #按钮
    Caesar_button = Button(f2, text="SHA1 Go!", width=10,command=sha1F)
    Caesar_button.grid(row=0,padx=15,pady=15)

def Rc4TK():
    def rc4F():
        src = init_data_Text.get(1.0,END).strip().replace("\n","")
        key = key_data_Text.get(1.0,END).strip().replace("\n","")
        if src and key:
            try:
                mess=rc4.ende(src,key)
                #输出到界面
                result_data_Text.delete(1.0,END)
                result_data_Text.insert(1.0,mess)
            except:
                result_data_Text.delete(1.0,END)
                result_data_Text.insert(1.0,"突然失败不知所措,检查一下函数吧")
        else:
            result_data_Text.delete(1.0,END)
            result_data_Text.insert(1.0,"ERROR:RC4_encode/decode failed")

    allclear()
    #标签
    init_label = Label(f1, text="文本(c/m):")
    init_label.grid(row=0, column=0,sticky=W)
    key_label = Label(f1, text="密钥(k):")
    key_label.grid(row=5, column=0,sticky=W)
    result_label = Label(f1, text="结果(m/c):")
    result_label.grid(row=8, column=0,sticky=W)

    #文本框
    init_data_Text = Text(f1, width=60, height=6)  #原始数据录入框
    init_data_Text.grid(row=1, column=0,columnspan=4,rowspan=4,sticky=W)
    key_data_Text = Text(f1, width=60, height=1)  # 密钥
    key_data_Text.grid(row=6, column=0,columnspan=4,rowspan=2,sticky=W)
    result_data_Text = Text(f1, width=60, height=6)  #处理结果展示
    result_data_Text.grid(row=9, column=0,columnspan=4,rowspan=5,sticky=W)
    #按钮
    GObutton = Button(f2, text="RC4 Go!", width=10,command=rc4F)
    GObutton.grid(row=0,padx=15,pady=15)

root = Tk()
root.title("crypto tools")
root.geometry('544x300+400+150')
root.iconbitmap('ruina.ico')
root.resizable(0, 0) 
photo = PhotoImage(file='back.png')
plabel = Label(root,image=photo)
plabel.image = photo
plabel.grid(padx=0,pady=0)
menubar = Menu(root)
 
content=[['Caesar','Affine','Playfair','Vigenere','Hill'],['AES','DES'],['RSA','ELGamal'],['SHA-1'],['RC4']]
Main=['古典密码','对称密码','非对称密码','杂凑函数','序列密码']
#for i in range(len(Main)):
#新建一个空的菜单,将menubar的menu属性指定为filemenu,即filemenu为menubar的下拉菜单
filemenu = Menu(menubar, tearoff=0)
filemenu.add_command(label = content[0][0],command = CaesarTK)
filemenu.add_command(label = content[0][1],command = AffineTK)
filemenu.add_command(label = content[0][2],command = PlayfairTK)
filemenu.add_command(label = content[0][3],command = VigenereTK)
filemenu.add_command(label = content[0][4],command = HillTK)
menubar.add_cascade(label=Main[0], menu=filemenu)

filemenu = Menu(menubar, tearoff=0)
filemenu.add_command(label = content[1][0],command = AesTK)
filemenu.add_command(label = content[1][1],command = DesTK)
menubar.add_cascade(label=Main[1], menu=filemenu)

filemenu = Menu(menubar, tearoff=0)
filemenu.add_command(label = content[2][0],command = RsaTK)
filemenu.add_command(label = content[2][1],command = ELGamalTK)
menubar.add_cascade(label=Main[2], menu=filemenu)

filemenu = Menu(menubar, tearoff=0)
filemenu.add_command(label = content[3][0],command = Sha1TK)
menubar.add_cascade(label=Main[3], menu=filemenu)
filemenu = Menu(menubar, tearoff=0)

filemenu.add_command(label = content[4][0],command = Rc4TK)
menubar.add_cascade(label=Main[4], menu=filemenu)

global f1,f2
f1 = Frame(root,width=425,height=332,borderwidth=2)
f1.grid(row=1, column=0,sticky=N+W)
f2 = Frame(root,width=115,height=332,borderwidth=2)
f2.grid(row=1, column=1,sticky=N+E)
C_label = Label(root, text="(c)yemu 2018.3.15")
C_label.grid(row=2, column=0,columnspan=2)

root['menu'] = menubar

root.mainloop()

相关文章

网友评论

      本文标题:一个py编写的密码学集成工具

      本文链接:https://www.haomeiwen.com/subject/itrtpftx.html