现代密码学实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
v1.0 可编辑可修改
现代密码学
实验报告
学生姓名
学号
专业班级
指导教师
学院信息科学与工程学院
完成时间2014年5月
实验一对称密码算法实验
[实验目的]
1.掌握密码学中经典的对称密码算法DES、AES、RC4的算法原理。
2.掌握DES、AES、RC4的算法流程和实现方法。
[实验预备]
1.DES算法有什么特点算法中的哪些结构保证了其混淆和扩散的特性
答:分组比较短、密钥太短、密码生命周期短、运算速度较慢。采用替代和置换的方法简单有效地遵循了香农定理,替代操作通过S盒达到了混淆效果,置换操作通过P盒扩散效果。
2.AES算法的基本原理和特点。
答:AES加密数据块分组长度必须为128比特,密钥长度可以是128比特、192比特、256比特中的任意一个(如果数据块及密钥长度不足时,会补齐)。AES加密有很多轮的重复和变换。大致步骤如下:1、密钥扩展(KeyExpansion),2、初始轮(Initial Round),3、重复轮(Rounds),每一轮又包括:SubBytes、ShiftRows、MixColumns、AddRoundKey,4、最终轮(Final Round),最终轮没有MixColumns。
3.流密码RC4的密钥流生成以及S盒初始化过程。
答:RC4由伪随机数生成器和异或运算组成。RC4的密钥长度可变,范围是[1,255]。RC4一个字节一个字节地加解密。给定一个密钥,伪随机数生成器接受密钥并产生一个S盒。S盒用来加密数据,而且在加密过程中S盒会变化。初始化长度为256的S盒。第一个for循环将0到255的互不重复的元素装入S盒。第二个for循环根据密钥打乱S盒。下面i,j 是两个指针。每收到一个字节,就进行while循环。通过一定的算法((a),(b))定位S盒中的一个元素,并与输入字节异或,得到k。循环中还改变了S盒((c))。如果输入的是明文,输出的就是密文;如果输入的是密文,输出的就是明文。
[实验内容]
1.分析DES、AES、RC4、SHA的实现过程。
2. 用程序设计语言将算法过程编程实现。
3. 完成字符串数据的加密运算和解密运算
输入明文:Idolikethisbook
输入密钥:cryption
[实验步骤]
1. 预习DES、AES、RC4算法。
2. 写出算法流程,用程序设计语言将算法过程编程实现。DES算法流程:
代码:
#include ""
#include ""
#include
#include
#include <>
using namespace std;
enum{encrypt,decrypt};
入指定的明文、密钥进行实验,验证结果。
DES运行截图:
AES
文件:
目录:
运行截图:RC4运行截图:
4.自己选择不同的输入,记录输出结果。DES:
AES:
RC4:
写出所编写程序的流程图和运行界面、运行结果。
[问题讨论]
1.在DES算法中有哪些是弱密钥哪些是半弱密钥
答:弱密钥(十六进制编码):
001
FEFEFEFEFEFEFEFE
1F1F1F1F0F0F0E0E
E0E0E0E0F1F1F1F1
半弱密钥:
E01FE01FE01FE01F
FE01FE01FE01FE01
E001E001F101F101
FE1FFE1FFE01FE01。
2.改变明文或密钥中的一个比特值可能影响AES值中的多少比特
答:两个以上的比特。
3.分析实验中在编辑、编译、运行等各环节中所出现的问题及解决方法。
答:DES是分组密码,所以在完成一个一轮的8组加密后,要达到加密可变长度的明文时,必须很好的将算法循环成为一个完美的整体。但这个过程必须选择好输入与输出的方法和存储结构,比如使用string作为存储明文和密文的输出时,要注意到这种引用型的变量在存储时是属于同一片连续存储空间,所以一旦输出则会全部输出。所以必须每一次循环后赋空值达到释放空间的效果,然后用循环控制输出,用函数截取位数,达到控制效果。
AES算法在实现时要注意一个特别重要的地方,因为是给文件加密,所以必须将准备好的txt格式的记事本中放入要加密的明文,然后该文件必须放置在当前程序运行的目录之下,否则将无法加密。
RC4算法较为简单只需注意各处循环的参数指针即可,循环的嵌套以及输入输出与算法的结合,出错后,调整了相关的i,j值及循环位置即完成了。
回答问题
实验二公钥密码算法实验
[实验目的]
1.掌握密码学中常用的公钥密码算法RSA、ECC的算法原理。
2.掌握RSA、ECC的算法流程和实现方法。
[实验预备]
和ECC密码系统所基于的数学难题是什么
和ECC算法的基本原理。
3.公钥密码系统可以取代对称密码系统吗
和ECC的实现过程。
[实验内容]
1. 分析RSA、ECC的实现过程。
2. 用程序设计语言将算法过程编程实现
3. 完成数据的加密运算和解密运算
输入明文:security
输入密钥:cryption
对ASCII码进行加密和解密。
[实验步骤]
1. 预习RSA、ECC算法。
2. 了解大素数的生成、大数的运算、公钥、私钥的生成。
3. 写出算法流程,用程序设计语言将算法过程编程实现。RSA算法流程:
代码:
#include
#include
using namespace std;
int CheckPrime()