凯撒密码_界面(python)

1.凯撒密码简介

公元前100多年凯撒发明的一种密码,简单来说是平移密码,也就是将字母位置向后移动一定位数。
如原文是ABCXYZ,密钥为3,加密后就是DEFABC。
以密钥的数字向后平移了三位,如果密钥是5就是平移五位。
解密就是把加密的文字进行还原。

2.对凯撒密码进行分析

我们通过对题目的分析可以发现,加密与解密就是对字母的ASCII值移动n位后得到的字母,当我们对字母加密后解密就是加密的反过程。
总体来说就是对ASCII的处理。

3.代码

import tkinter as tk
from tkinter import messagebox


class jiami:
    def __init__(self):
        self.root = tk.Tk()
        self.root.title('加密')
        self.root.geometry('220x80+600+200')
        self.jiemian()
        self.root.mainloop()

    def jiemian(self):
        self.lable01 = tk.Label(self.root, text='请输入明文:')
        self.lable01.grid(row=0, column=0)
        self.v1 = tk.StringVar()
        self.entry01 = tk.Entry(self.root, textvariable=self.v1)
        self.entry01.grid(row=0, column=1, sticky=tk.NSEW)

        self.lable02 = tk.Label(self.root, text='请输入密钥:')
        self.lable02.grid(row=1, column=0)
        self.v2 = tk.StringVar()
        self.entry02 = tk.Entry(self.root, textvariable=self.v2)
        self.entry02.grid(row=1, column=1, sticky=tk.NSEW)

        self.btn01 = tk.Button(self.root, text="加密",width=16, command=self.yunsuan)
        self.btn01.grid(row=2, column=1)

    def yunsuan(self):
        self.a = self.entry01.get()
        print("明文:" + self.a)
        self.b = self.entry02.get()
        print("密钥:" + self.b)
        self.c = self.jiami1()
        print("暗文:" + self.c)
        self.root.destroy()
        messagebox.showinfo("暗文", "明文:" + self.a + "\n密钥:" + self.b + "\n暗文:" + self.c)

    def jiami1(self):
        a = self.a
        n = int(self.b)
        n = n % 26
        b = ""
        for i in a:
            if i == ' ':
                i = ' '
            else:
                if 'a' <= i <= 'z':
                    s = chr((ord(i) - ord('a') + n) % 26 + ord('a'))
                    b += s
                if 'A' <= i <= 'Z':
                    s = chr((ord(i) - ord('A') + n) % 26 + ord('A'))
                    b += s
        return b


class jiemi:
    def __init__(self):
        self.root = tk.Tk()
        self.root.title('解密')
        self.root.geometry('220x80+600+200')
        self.jiemian()
        self.root.mainloop()

    def jiemian(self):
        self.lable01 = tk.Label(self.root, text='请输入暗文:')
        self.lable01.grid(row=0, column=0)
        self.v1 = tk.StringVar()
        self.entry01 = tk.Entry(self.root, textvariable=self.v1)
        self.entry01.grid(row=0, column=1, sticky=tk.NSEW)

        self.lable02 = tk.Label(self.root, text='请输入密钥:')
        self.lable02.grid(row=1, column=0)
        self.v2 = tk.StringVar()
        self.entry02 = tk.Entry(self.root, textvariable=self.v2)
        self.entry02.grid(row=1, column=1, sticky=tk.NSEW)

        self.btn01 = tk.Button(self.root, text="解密",width=16, command=self.yunsuan)
        self.btn01.grid(row=2, column=1)

    def yunsuan(self):
        self.a = self.entry01.get()
        print("暗文:" + self.a)
        self.b = self.entry02.get()
        print("密钥:" + self.b)
        self.c = self.jiemi1()
        print("明文:" + self.c)
        self.root.destroy()
        messagebox.showinfo("暗文", "暗文:" + self.a + "\n密钥:" + self.b + "\n明文:" + self.c)

    def jiemi1(self):
        a = self.a
        n = int(self.b)
        n = n % 26
        b = ""
        for i in a:
            if i == ' ':
                i = ' '
            else:
                if 'a' <= i <= 'z':
                    s = chr((ord(i) - ord('a') - n) % 26 + ord('a'))
                    b += s
                if 'A' <= i <= 'Z':
                    s = chr((ord(i) - ord('A') - n) % 26 + ord('A'))
                    b += s
        return b


class caidan:
    def __init__(self):
        self.root = tk.Tk()
        self.root.title('菜单')
        self.root.geometry('245x145+600+200')
        self.mulu()
        self.root.mainloop()

    def mulu(self):
        self.but1 = tk.Button(self.root, text=" 1.加 密 ",height=2, width=16, command=jiami)
        self.but1.grid(row=1, column=0,columnspan=2)
        self.but2 = tk.Button(self.root, text=" 2.解 密 ",height=2, width=16, command=jiemi)
        self.but2.grid(row=2, column=1,columnspan=2)
        self.but3 = tk.Button(self.root, text=" 3.退 出 ",height=2, width=16, command=self.root.destroy)
        self.but3.grid(row=3, column=2,columnspan=2)

if __name__ == "__main__":
    caidan()

4.对代码的分析

1.代码结构

                                       加密类
                                 ->
           主函数  ->   菜单类
                                 ->
                                       解密类

主函数调用菜单类,显示菜单窗口,在菜单类中,加密按钮调用加密类,显示加密页面,解密按钮调用解密类,显示解密页面

2.caidan类

有三个按钮构成,分别是加密,解密,退出。
加密解密按钮分别调用加密解密类。
退出按钮关闭页面结束程序

3.jiami类

def jiemian(self)方法中由两个文本框,两个输入框与一个加密按钮构成,输入框分别接收明文与密钥,加密按钮调用yunsuan方法对明文进行加密,在jiami1方法中对明文进行加密,并返回暗文,在运算方法中接收暗文并进行结果的显示。

4.jiemi类

def jiemian(self)方法中由两个文本框,两个输入框与一个解密按钮构成,输入框分别接收暗文与密钥,解密按钮调用yunsuan方法对暗文进行解密,在jiemi1方法中对暗文进行解密,并返回明文,在运算方法中接收明文并进行结果的显示。

5.结果显示

按菜单页面加密解密按钮显示的界面
在这里插入图片描述
按加密解密页面加密解密按钮显示的页面
在这里插入图片描述
控制台显示的结果
在这里插入图片描述

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值