2022秋季信息安全实验1

实验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()

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实验名称: DES算法的编程实现 一、实验概述: DES是美国国家标准技术研究所NIST于1977年制定的分组密码的加密标准,广泛应用于商用数据加密。尽管目前逐渐为AES算法所替代,但作为第一个被公布出来的标准算法,对现代分组密码理论的发展和应用起了奠基性作用,其基本理论和设计思想仍有重要参考价值。DES采用对称分组密码体制,数据块分组长度为64比特,密钥长度是56比特,若输入64比特,则有8个比特用于奇偶校验位。 二、实验目的: 1、 理解分组加密算法的原理和特点 2、 掌握DES算法的加密原理 三、实验原理: DES算法是一种典型的明文块加密标准一一一种将固定长度的明文通过一系列复杂的操作变成同样长度的密文的算法。 对DES而言,块长度为64位。同时,DES使用密钥来自定义变换过程,因此算法认为只有持有加密所用的密钥的用户才能解密密文密钥表面上是64位的,然而只有其中的56位被实际用于算法,其余8位可以被用于奇偶校验,并在算法中 被丢弃。因此,DES的有效密钥长度为56位,通常称DES的密钥长度为56位。 与其它加密算法相似,DES自身并不是加密的实用手段,而必须以某种工作模式进行实际操作。 DES同时使用了代换和置换两种技巧,整个过程分为两大部分: 1,加密过程; 2,子密钥产生过程。 需要注意的是,DES算法的计算结果与其运作的平台上的编码、所选的加密模式、填充模式等密切相关,所以不同的软件针对同一密文、同一密钥解密出来的结果可能是不一样的,这与计算的正确性无关。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值