2022秋季信息安全实验1

发布于:2023-01-04 ⋅ 阅读:(343) ⋅ 点赞:(0)

实验1.1

4/凯撒密码是一种单表置换密码,它的加密方法就是把明文中所有字母都用它右面的第k个字母代替,并认为z后面又是a。加密函数可以表示为:
f(a ) = ( a +k ) mod n
其中f(a)表示密文字母在字母表中的位置,a表示明文字母在字母表中的位置,k是密钥, n为字母表中的字符个数。
设有明文security ,密钥k =3,密钥字母表如表2.14所示,其中字母表示明文或密文字符集,数字表示字母在密钥字母表中的位置。
表2.14密钥字母表
a b c d e f g h i j k l m n o p q r  s t u v w x y z

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
(1)请写出加密后的密文。

vhfxulwb
(2)请写出该凯撒密码的解密函数。

a=(f(a)-k+26)%26
(3)请用高级语言编写通用凯撒密码的加密/解密程序。

开发运行环境说明:Python3

源代码:

import PySimpleGUI as simpleGui
import datetime

class item:
    def __init__(self):
        self.zm=['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
        self.sz=[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]

a=item()
# print(a.sz[6])

def dealMainWindowOpenWindowEvent(window2):#点击打开新窗口所产生的事件
    try:
        if not window2:#只能打开一个新窗口
            window2 = make_window2()
            window2.make_modal()  # 这行代码把当前窗口设置为有模式的
    except Exception as result:
        print("函数 dealMainWindowEvent 捕捉到异常:%s" % result)
    return window2


def dealMainWindowEncryptEvent(values):#点击加密产生的事件
    try:
        text = values['keyMainWindowPlaintext']
        if text.strip() == "":
            simpleGui.popup_error("提示", "请先输入明文!")
        else:
            # simpleGui.popup("提示", "请自己实现加密函数!!!")
            b=[]
            for i in values['keyMainWindowPlaintext']:
                # print(i)
                for j in range(26):
                    if(i==a.zm[j]):
                        b.append(a.zm[(j+int(values['keyMainWindowKey']))%26])
            return b
            # values['keyMainWindowCiphertext']=1
    except Exception as result:
        print("函数 dealMainWindowEvent 捕捉到异常:%s" % result)


def dealMainWindowDecryptEvent(values):  # 点击解密产生的事件
    try:
        text = values['keyMainWindowCiphertext']
        if text.strip() == "":
            simpleGui.popup_error("提示", "请先输入密文!")
        else:
            c = []
            for i in values['keyMainWindowCiphertext']:
                for j in range(26):
                    if (i == a.zm[j]):
                        c.append(a.zm[(j - int(values['keyMainWindowKey'])+26) % 26])
            return c
    except Exception as result:
        print("函数 dealMainWindowEvent 捕捉到异常:%s" % result)


def dealWindow2OkEvent(window2, values):#点击窗口2的"确定"所产生的事件
    newText = ""
    try:
        newText = values['keyWindow2ulText']#从输入框获得文字
        window2.close()#关闭
        window2 = None
    except Exception as result:
        print("函数 dealWindow2Event 捕捉到异常:%s" % result)
    return window2, newText


def make_window2():#创建新窗口的方法
    try:
        # 创建 window2 布局
        window2Layout = [
            [simpleGui.Text('文本'), simpleGui.Input('新窗口默认文本 hello gui。', key='keyWindow2ulText')],
            [simpleGui.Button('确定', key='keyWindow2Ok'), simpleGui.Button('取消', key='keyWindow2Cancel')]
        ]
        window2 = simpleGui.Window("打开新窗口", window2Layout, finalize=True)
        return window2
    except Exception as result:
        print("make_window2 捕捉到异常:%s" % result)


def main():
    try:
        # 创建 mainWindow 布局
        mainWindowLayout = [
            [simpleGui.Text('明文'), simpleGui.Input(key='keyMainWindowPlaintext', size=(80, 1)), ],
            [simpleGui.Text('密钥'), simpleGui.Input(key='keyMainWindowKey', size=(80, 1)), ],
            [simpleGui.Text('密文'), simpleGui.Input(key='keyMainWindowCiphertext', size=(80, 1)), ],
            [simpleGui.Text('文本'), simpleGui.Multiline(key='keyMainWindowMulText', size=(80, 8))],
            [simpleGui.Button('加密', key='keyMainWindowEncrypt'),
             simpleGui.Button('解密', key='keyMainWindowDecrypt'),
             simpleGui.Button('打开新窗口', key='keyMainWindowOpenWindow'), ],
            [simpleGui.Button('确定', key='keyMainWindowOk'), simpleGui.Button('取消', key='keyMainWindowCancel')],
        ]

        # 创建窗口,引入布局,并进行初始化。
        mainWindow = simpleGui.Window('对称加密演示程序', layout=mainWindowLayout, finalize=True)

        # 暂时先不创建window2
        window2 = None

        # 创建一个事件循环,否则窗口运行一次就会被关闭。
        while True:
            window, event, values = simpleGui.read_all_windows()
            print(window, event, values)  # 可以打印一下着看变量的内容
            if window == mainWindow:
                if event in (simpleGui.WIN_CLOSED,  'keyMainWindowOk', 'keyMainWindowCancel'):#点击主窗口的关闭按钮或者确定按钮或者取消按钮
                    break
                elif event == 'keyMainWindowOpenWindow':
                    window2 = dealMainWindowOpenWindowEvent(window2)#点击打开新窗口所产生的事件
                elif event == 'keyMainWindowEncrypt':
                    miwen=dealMainWindowEncryptEvent(values)#点击加密产生的事件
                    mainWindow['keyMainWindowCiphertext'].update(miwen)#在密文框中输出密文
                elif event == 'keyMainWindowDecrypt':
                    mingwen = dealMainWindowDecryptEvent(values)  # 点击解密产生的事件
                    mainWindow['keyMainWindowPlaintext'].update(mingwen)  # 在明文框中输出明文
            if window == window2:
                if event in (simpleGui.WIN_CLOSED, 'keyWindow2Cancel'):#点击窗口2的"取消"所产生的事件
                    window2.close()
                    window2 = None
                elif event == 'keyWindow2Ok':#点击窗口2的"确定"所产生的事件
                    window2, newText = dealWindow2OkEvent(window2, values)
                    text = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') + "\n从window2获得文本:\n" + newText
                    mainWindow['keyMainWindowMulText'].update(text)
        # 关闭窗口
        mainWindow.close()
        if window2 is not None:
            window2.close()
    except Exception as result:
        print("函数 main 捕捉到异常:%s" % result)


if __name__ == '__main__':
    main()

实验1.2

设英文字母a,b,c,…,z的编号分别为0,1 ,2,… ,25,仿射密码加密变换可以表示为
c = (3m + 5) mod 26
其中m表示明文编号,c表示密文编号。
(1)试对明文security进行加密。

h r l n e d k z

(2)写出该仿射密码的解密函数。

m=(3^(-1))*(c-5) mod 26

(3)试对密文进行解密。
开发运行环境说明:Python3

源代码:(和1.1类似,代码有点小问题,还望读者完善)

import PySimpleGUI as simpleGui
import datetime

class item:
    def __init__(self):
        self.zm=['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
        self.sz=[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]

a=item()
# print(2/3)

def dealMainWindowOpenWindowEvent(window2):#点击打开新窗口所产生的事件
    try:
        if not window2:#只能打开一个新窗口
            window2 = make_window2()
            window2.make_modal()  # 这行代码把当前窗口设置为有模式的
    except Exception as result:
        print("函数 dealMainWindowEvent 捕捉到异常:%s" % result)
    return window2


def dealMainWindowEncryptEvent(values):#点击加密产生的事件
    try:
        text = values['keyMainWindowPlaintext']
        if text.strip() == "":
            simpleGui.popup_error("提示", "请先输入明文!")
        else:
            # simpleGui.popup("提示", "请自己实现加密函数!!!")
            b=[]
            for i in values['keyMainWindowPlaintext']:
                # print(i)
                for j in range(26):
                    if(i==a.zm[j]):
                        # b.append(a.zm[(j+int(values['keyMainWindowKey']))%26])
                        b.append(a.zm[(3*j + 5) % 26])
            return b
            # values['keyMainWindowCiphertext']=1
    except Exception as result:
        print("函数 dealMainWindowEvent 捕捉到异常:%s" % result)


def dealMainWindowDecryptEvent(values):  # 点击解密产生的事件
    try:
        text = values['keyMainWindowCiphertext']
        if text.strip() == "":
            simpleGui.popup_error("提示", "请先输入密文!")
        else:
            c = []
            for i in values['keyMainWindowCiphertext']:
                for j in range(26):
                    if (i == a.zm[j]):
                        # c.append(a.zm[(j - int(values['keyMainWindowKey'])+26) % 26])
                        c.append(a.zm[(3^(-1))*(j - 5) % 26])#将security的密文hrlnedkz再次解密发现明文变成了secueigy
                        # for k in range(4):
                        #     p=j
                        #     if((p-5)/3==0):
                        #         c.append(a.zm[((p - 5)/3 )%26])
                        #         break
                        #     else:
                        #         p=p+26
            return c
    except Exception as result:
        print("函数 dealMainWindowEvent 捕捉到异常:%s" % result)


def dealWindow2OkEvent(window2, values):#点击窗口2的"确定"所产生的事件
    newText = ""
    try:
        newText = values['keyWindow2ulText']#从输入框获得文字
        window2.close()#关闭
        window2 = None
    except Exception as result:
        print("函数 dealWindow2Event 捕捉到异常:%s" % result)
    return window2, newText


def make_window2():#创建新窗口的方法
    try:
        # 创建 window2 布局
        window2Layout = [
            [simpleGui.Text('文本'), simpleGui.Input('新窗口默认文本 hello gui。', key='keyWindow2ulText')],
            [simpleGui.Button('确定', key='keyWindow2Ok'), simpleGui.Button('取消', key='keyWindow2Cancel')]
        ]
        window2 = simpleGui.Window("打开新窗口", window2Layout, finalize=True)
        return window2
    except Exception as result:
        print("make_window2 捕捉到异常:%s" % result)


def main():
    try:
        # 创建 mainWindow 布局
        mainWindowLayout = [
            [simpleGui.Text('明文'), simpleGui.Input(key='keyMainWindowPlaintext', size=(80, 1)), ],
            [simpleGui.Text('密钥'), simpleGui.Input(key='keyMainWindowKey', size=(80, 1)), ],
            [simpleGui.Text('密文'), simpleGui.Input(key='keyMainWindowCiphertext', size=(80, 1)), ],
            [simpleGui.Text('文本'), simpleGui.Multiline(key='keyMainWindowMulText', size=(80, 8))],
            [simpleGui.Button('加密', key='keyMainWindowEncrypt'),
             simpleGui.Button('解密', key='keyMainWindowDecrypt'),
             simpleGui.Button('打开新窗口', key='keyMainWindowOpenWindow'), ],
            [simpleGui.Button('确定', key='keyMainWindowOk'), simpleGui.Button('取消', key='keyMainWindowCancel')],
        ]

        # 创建窗口,引入布局,并进行初始化。
        mainWindow = simpleGui.Window('对称加密演示程序', layout=mainWindowLayout, finalize=True)

        # 暂时先不创建window2
        window2 = None

        # 创建一个事件循环,否则窗口运行一次就会被关闭。
        while True:
            window, event, values = simpleGui.read_all_windows()
            print(window, event, values)  # 可以打印一下着看变量的内容
            if window == mainWindow:
                if event in (simpleGui.WIN_CLOSED,  'keyMainWindowOk', 'keyMainWindowCancel'):#点击主窗口的关闭按钮或者确定按钮或者取消按钮
                    break
                elif event == 'keyMainWindowOpenWindow':
                    window2 = dealMainWindowOpenWindowEvent(window2)#点击打开新窗口所产生的事件
                elif event == 'keyMainWindowEncrypt':
                    miwen=dealMainWindowEncryptEvent(values)#点击加密产生的事件
                    mainWindow['keyMainWindowCiphertext'].update(miwen)#在密文框中输出密文
                elif event == 'keyMainWindowDecrypt':
                    mingwen = dealMainWindowDecryptEvent(values)  # 点击解密产生的事件
                    mainWindow['keyMainWindowPlaintext'].update(mingwen)  # 在明文框中输出明文
            if window == window2:
                if event in (simpleGui.WIN_CLOSED, 'keyWindow2Cancel'):#点击窗口2的"取消"所产生的事件
                    window2.close()
                    window2 = None
                elif event == 'keyWindow2Ok':#点击窗口2的"确定"所产生的事件
                    window2, newText = dealWindow2OkEvent(window2, values)
                    text = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') + "\n从window2获得文本:\n" + newText
                    mainWindow['keyMainWindowMulText'].update(text)
        # 关闭窗口
        mainWindow.close()
        if window2 is not None:
            window2.close()
    except Exception as result:
        print("函数 main 捕捉到异常:%s" % result)


if __name__ == '__main__':
    main()

半山腰总是最挤的,你得去山顶看看。

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到