信息学部
密码学 实验报告
( 级)
学生姓名:
学 号:
班 级:
2023 年 11 月 30 日
密码学实验成绩评定表
开课学期
2023-2024-1
班级
210720
实验课时
8
评定内容及成绩比例
评审项目
评审内容
分值
考核环节 1(10 分)
出勤
按时到实验室做实验,不迟到、不旷课
考核环节 2(50 分)
有图形界面(5 分)
置换密码算法
无图形界面(3 分)
有图形界面(5 分)
古典密码算法(10
分)
替代密码算法
无图形界面(3 分)
有图形界面(10 分)
实现 DES 加解
密算法
无图形界面(7 分)
有运行时间(1 分)
对文件进行加解密(3 分)
ECB、CBC 模式加解密算法(4 分)
DES 密码算法(20
分)
3DES 加解密算法(2 分)
有自动生成公私钥算法(5 分)
公私钥生成
算法
公私钥部分从集合中选取(4 分)
有图形界面(10 分)
实现 RSA 加解
密算法
无图形界面(7 分)
有运行时间(1 分)
RSA 密码算法(20
分)
对文件进行加解密(4 分)
考核环节 3(10 分)
按时完成(10 分)
完成时间
拖后完成(7 分)
考核环节 4(30 分)
结构完善(7 分)
原理描述清晰(5 分)
程序流程阐述清晰(5 分)
代码模块化清晰(8 分)
界面美观,使用方便(3 分)
实验报告
程序使用说明清晰(2 分)
教师评语
合计得分
100 分
实验一、古典密码算法的设计与实现
1. 实验目的
通过编程实现替代密码和置换密码算法,加深对古典密码体制的了解,为深
入学习密码学奠定基础。
2. 实验任务
自己生成明文,并选择一个密钥,编程实现一种替代密码和一种置换密码算
法,实现加解密操作,要求上述密码算法最后的实现程序提供加密和解密两个
接口,提供图形化用户界面(选做)。提交核心程序代码和执行结果,并撰写实
验报告。
3. 实验环境
信息楼西 522,Windows 11,Microsoft Visual Studio 2019,Qt Designer。
4. 实验原理
1. 替代密码
替代密码算法的原理是使用替代法进行加密,就是将明文中的字符用其它字符
替代后形成密文.例如:明文字母 a,b,c,d ,用 D,E,F,G 做对应替换后形成密文.
替代密码包括多种类型,如单表替代密码,多明码替代密码,多字母替代密码,多
表替代密码.
1)一种典型的单表替代密码,恺撒(caesar)密码,又叫循环移位密码.它的加密
方法,就是将明文中的每个字母用此字符在字母表中后面第 k 个字母替代.它的
加密过程可以表示为下面的函数:
E(m)=(m+k) mod n
其中:m 为明文字母在字母表中的位置数;n 为字母表中的字母个数;k 为密钥;E(m)
为密文字母在字母表中对应的位置数.
例如,对于明文字母 H,其在字母表中的位置数为 7,设 k=4,则按照上式计算
出来的密文为 L:
E(7) = (m+k) mod n = (7+4) mod 26 = 11 = L
2)一种典型的多表替代密码:维吉尼亚密码,它选择一个词组作为密钥,密钥
中每个字母用来确定一个代换表,每个密钥字母用来加密一个明文字母。例如
密钥字母为 a,明文字母为 c,则密文字母为 0+2(mod26)=2,也就是 c。直到所
有的密钥字母用完,后再从头开始,使用第一个密钥字母加密。也就是说,密
钥循环使用。
例:明文为 attack begins at five,密钥为 cipher,
attack begins at five 明文
+ cipher cipher ci pher 密钥
= cbihgb dmvprj cb upzv 密文
去除空格后为 cbihgbdmvprjcbupzv
2. 置换密码
置换密码算法的原理是不改变明文字符,只将字符在明文中的排列顺序改变,
从而实现明文信息的加密.置换密码有时又称为换位密码.
矩阵换位法是实现置换密码的一种常用方法.它将明文中的字母按照给的
顺序安排在一个矩阵中,然后用根据密钥提供的顺序重新组合矩阵中字母,从而
形成密文.例如,明文为 attack begins at five,密钥为 cipher,将明文按照每
行 6 列的形式排在矩阵中,形成如下形式:
a t t a c k
b e g i n s
a t f i v e
根据密钥 cipher 中各字母在字母表中出现的先后顺序,给定一个置换:
1 2 3 4 5 6
F= 1 4 5 3 2 6 1
根据上面的置换,将原有矩阵中的字母按照第 1 列,第 4 列,第 5 列,第 3 列,第 2
列,第 6 列的顺序排列,则有下面形式:
a a c t t k
b i n g e s
a i v f t e
从而得到密文:abatgftetcnvaiikse
其解密的过程是根据密钥的字母数作为列数,将密文按照列,行的顺序写出,再
根据由密钥给出的矩阵置换产生新的矩阵,从而恢复明文.
5. 程序设计及核心代码
(1) 程序设计流程
置换密码