现代密码学实验报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

现代密码学实验报告

学生姓名

学号

专业班级

指导教师

学院信息科学与工程学院

完成时间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()

{

int n;

double k;

cin >> n;

k = sqrt(n);

int i;

if(n>=2 && n<=10000)

{

for(i=2; i<=k; i++)

{

if(n%i == 0)

相关文档
最新文档