现代密码学与加解密技术实验报告.docx

上传人:b****1 文档编号:2468668 上传时间:2023-05-03 格式:DOCX 页数:26 大小:130.23KB
下载 相关 举报
现代密码学与加解密技术实验报告.docx_第1页
第1页 / 共26页
现代密码学与加解密技术实验报告.docx_第2页
第2页 / 共26页
现代密码学与加解密技术实验报告.docx_第3页
第3页 / 共26页
现代密码学与加解密技术实验报告.docx_第4页
第4页 / 共26页
现代密码学与加解密技术实验报告.docx_第5页
第5页 / 共26页
现代密码学与加解密技术实验报告.docx_第6页
第6页 / 共26页
现代密码学与加解密技术实验报告.docx_第7页
第7页 / 共26页
现代密码学与加解密技术实验报告.docx_第8页
第8页 / 共26页
现代密码学与加解密技术实验报告.docx_第9页
第9页 / 共26页
现代密码学与加解密技术实验报告.docx_第10页
第10页 / 共26页
现代密码学与加解密技术实验报告.docx_第11页
第11页 / 共26页
现代密码学与加解密技术实验报告.docx_第12页
第12页 / 共26页
现代密码学与加解密技术实验报告.docx_第13页
第13页 / 共26页
现代密码学与加解密技术实验报告.docx_第14页
第14页 / 共26页
现代密码学与加解密技术实验报告.docx_第15页
第15页 / 共26页
现代密码学与加解密技术实验报告.docx_第16页
第16页 / 共26页
现代密码学与加解密技术实验报告.docx_第17页
第17页 / 共26页
现代密码学与加解密技术实验报告.docx_第18页
第18页 / 共26页
现代密码学与加解密技术实验报告.docx_第19页
第19页 / 共26页
现代密码学与加解密技术实验报告.docx_第20页
第20页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

现代密码学与加解密技术实验报告.docx

《现代密码学与加解密技术实验报告.docx》由会员分享,可在线阅读,更多相关《现代密码学与加解密技术实验报告.docx(26页珍藏版)》请在冰点文库上搜索。

现代密码学与加解密技术实验报告.docx

现代密码学与加解密技术实验报告

现代密码学与加解密技术实验

一、实验教学目标与基本要求

现代密码学与加解密技术实验是本课程重要的实践教学环节。

实验的目的不仅仅是验证理论知识,更重要的是通过实验加强学生的实验手段与实践技能,培养学生分析问题、解决问题、应用知识的能力和创新精神,全面提高学生的综合素质。

通过本实验简要了解密码学以及现代密码算法的基本知识,学会常用文件加密的实现、了解系统加密解密技术,具体掌握几种加解密方法。

实验后完成要求撰写实验报告,报告内容包括题目、测试数据、运行结果、遇到的问题和解决方法、关键代码或程序清单,学生可以在实验报告中提出对实验的建议和意见。

二、实验项目及教学安排

序号

实验项目名称

基本内容

实验学时

每组人数

实验要求

实验

类型

1

Vigenere的编程实现

编程(建议使用C语言)实现古典密码体制中的Vigenere密码,并加/解密一个字符串或文件

2

1

必修

设计性

2

Columnpermutationcipher的编程实现

编程(建议使用C语言)实现古典密码体制中的Columnpermutation密码,并加/解密一个字符串或文件

2

1

必修

设计性

3

DES的编程实现

使用C语言设计实现DES密码,并加密一个文件

4

1

必修

设计性

三、实验成绩考核办法

每次实验后,要求从以下几个方面书写实验报告:

实验题目,程序清单,实验用数据及结果,学生可以在实验报告中提出对实验的建议和意见。

实验成绩满分100分,并按10%折算记入课程总成绩,实验成绩不合格者不得参加期末考试。

实验成绩按下面7条进行考核评定。

(1)做好实验内容的预习,写出预习报告;占10%。

(2)了解实验题目的调试方法;占10%。

(3)按实验要求预先设计好程序;占10%。

(4)认真记录实验数据并分析实验结果;占10%。

(5)实验后按要求书写实验报告,记录实验用数据及运行结果;占30%。

(6)创新能力强,在实验中设计的程序有一定的通用性,算法优化;20%。

(7)实验过程中,具有严谨的学习态度,认真、踏实、一丝不苟的科学作风;10%

四、实验教材及参考书

1.RichardJ.Spillman:

《CLASSICALANDCONTEMPORARYCRYPTOLOGY》,清华大学出版社,2005-7

2.WilliamStallings:

CryptographyandNetworkSecurity:

PrinciplesandPractice.2nded.PrenticeHall,1998.

3.杨波著:

《现代密码学》,清华大学出版社,2003-8.

4.WenboMao.ModernCryptography:

TheoryandPracticce.电子工业出版社,2004-7.

5.许主洪著:

《加密与解密-密码技术剖析与实战应用》,人民邮电出版社,2002-8.

6.张焕国,刘玉珍著:

《密码学引论》,武汉大学出版社,2003.

7.段钢著:

《加密与解密》,电子工业出版社,2005-3.

五、实验内容与报告的要求

实验1、2的内容要求(提示性的)与封面见附录一(打印时将“附录一”3个字去掉)。

实验3的内容要求(提示性的)与封面见附录二(打印时将“附录二”3个字去掉)。

严禁互相抄袭!

一经发现抄袭者与被抄袭者全无成绩!

五、时间与场地

第7、9周,周一9-12节;综合楼311,软信1201-03班

(附录一)

现代密码学与加解密技术实验报告

实验名称

Vigenere和Columnpermutationcipher的编程实现

班级

信息安全一班

学号

20124961

姓名

郑魏献

日期

2014-5-3

成绩

评阅人

软件学院

一、实验目的与意义

通过编程实现Vigenere和Columnpermutationcipher密码算法,加深了我们对古典密码学的了解,这也为我们深入学习密码学奠定了坚实的基础。

二、实验环境

操作系统:

WindowsXP

上级地点:

综合楼311

编程软件:

VC++6.0

三、实验的预习内容

密码学基础vigenere算法、Columnpermutationcipher算法相关知识。

 

 

四、实验的步骤与调试方法

Vigenere:

加密:

实验步骤:

1获得秘钥2创建加密矩阵3获得明文4加密5得到密文

解密:

实验步骤:

1获得秘钥2创建加密矩阵3获得密文4解密5获得明文

Columnpermutation:

加密:

实验步骤:

1获得明文2将明文按长度D分3加密4获得密文

解密:

实验步骤:

1输入密文2从F中找到密文对应位置的数3根据位置置换密文的明文4解密5获得明文

五、实验数据与实验结果

Vigenere:

1

明文:

woshidongbeidaxuexuesheng

关键字:

line

密文:

hwfltlbroikypfhidprrr

2

密文:

scehvvvantciarrj

关键字:

woman

明文:

woshizhongguoren

Columnpermutation:

1

明文:

woshizhongguoren

关键字:

line

密文:

sygeozgrhounwino

2密文:

woshidongbeidaxuexuesheng

关键字:

line

明文:

uowdenoasgsxhbhueeisnidx

六、实验用程序清单(要有注释)

vigenere

/*初始化vigenere方阵*/

for(i=1;i<27;i++){

for(j=1;j<27;j++){

square[i][j]=63+i+j;

if(square[i][j]>90)

square[i][j]=square[i][j]-26;

}

}

for(k=1;k<27;k++){

for(m=1;m<27;m++){

printf("%c",square[k][m]);

}

printf("\n");

}

/*加密算法*/

char*vigenere(charkey[],charword[]){

char*text=(char*)malloc(MAX*sizeof(char));

intkey_length=strlen(key);

intword_length=strlen(word);

inti,j,c;

for(i=0;i

if((word[i]>=65&&word[i]<=90)||(word[i]>=97&&word[i]<=122)){

if(word[i]>=97&&word[i]<=122){

c=word[i]-96;

}

else{

c=word[i]-64;

}

j=i%key_length;

text[i]=square[key[j]-96][c];

}

elsetext[i]=word[i];

}

text[i]='\0';

returntext;

}

/*解密算法*/

char*anti_vigenere(charkey[],char*en_word){

char*word=(char*)malloc(MAX*sizeof(char));

intkey_length=strlen(key);

intword_length=strlen(en_word);

inti,j,c,k,d;

for(i=0;i

if(en_word[i]>=65&&en_word[i]<=90){

c=i%key_length;/*所用密钥在所在*/

k=key[c]-96;

d=en_word[i]-square[k][1];

if(d>=0){

word[i]='a'+d;

}else{

word[i]='z'+d+1;

}

}else{

word[i]=en_word[i];

}

}

word[i]='\0';

returnword;

}

Columnpermutetion

加密

voidEncryption(charstr1[],charkey[])

{

inti,j;

charnum[300];

intplen=strlen(str1);

intlen=strlen(key);

for(i=0;i

{

num[i]=1;

for(j=0;j

{

if(key[j]

num[i]++;

}

for(j=0;j

{if(key[j]==key[i])

num[i]=num[i]+1;

}

}

printf("\n");

for(i=0;i

for(j=0;j

printf("%c",str1[j*len+num[i]-1]);

printf("");

}

printf("\n");

}

解密

voidDecryption(charkey[],charstr3[])

{

inti,j;

charnum[500];

charcnum[500];

intclen=strlen(str3);

intlen=strlen(key);

for(i=0;i

{

num[i]=1;

for(j=0;j

{if(key[j]

num[i]++;

}

for(j=0;j

{if(key[j]==key[i])

num[i]=num[i]+1;

}

}

for(i=0;i

{

for(j=0;j

if(i+1==num[j])

cnum[i]=j;

}

for(i=0;i

for(j=0;j

printf("%c",str3[cnum[j]*clen/len+i]);

printf("");

}

printf("\n");

}

七、思考题(必需回答)写明如下问题

1.Vigenere密码的原理是什么?

Vigenere加密法是基于关键词的加密系统,但不是像单码关键词加密法那样使用关键词来定义替换模式的,关键词写在明文的上面,并不断重复书写,这样每个明文字母都与一个关键词的字母关联。

例如,如果关键词为"hold",而明文为"thisistheplaintext",那么,关键词——明文的关联如下所示:

holdholdholdholdho

thisistheplaintext

每个明文字母与关键词的一个字母对应。

例如,第一个明文字母"t"与关键词的字母"h"配对。

利用如下图所示的Vigenere表,在密钥字母确定的行和明文字母确定的列交叉处的字母即为用来替代明文字母的密文字母。

例如上面例子中第一对是"h--t",在下表中查找"h"行和"t"列的交叉处,即为密文字母"a"。

重复以上过程可以生成以下的密文:

密钥holdholdholdholdho

明文thisistheplaintext

密文avtvpgekldwdpbehdh

2.Vigenere密码的主要缺陷有哪些?

不能经受住频率分析的攻击方法

3.对Vigenere密码的分析方法有哪几种?

Vigenere密码是一个基于单表置换的分块对称加密算法。

将明文T分为长度为n的若干块(若最后一块不足则用随机数补满),密钥K长度为n。

在加密时对每个明文分块Ti做Ci=(Ti+Ki)%m,解密时对每个密文分块Ci做Ti=(Ci-Ki)%m,其中m为字符空间大小。

显然,该加密算法是一个不安全的加密算法。

Vigenere算法有着致命的缺陷Ki=(Ci-Ti)%m,使得他可以被已知明文攻击完全破解。

同时,利用Friedman攻击也能够完全破解该算法,只是破解难度稍大。

但是,我们也可以看到,这两种破解都有着一个共同的假设:

密钥长度n小于明文的长度,即相同的明文字符可能多次被相同的密钥字符加密,生成相同的密文字符。

4.对Vigenere密码的改进方法是什么?

使用长度分别为m和n的两个密钥来进行两轮加密,等效于使用密钥长度为m和n的最小公倍数的一个密钥进行一轮的加密(证明略)。

这样,如果m、n互质,我们实际上就做到了使用长度为m+n的密钥来代替长度为m*n的密钥,从而大大的降低了密钥的长度

5.Columnpermutationcipher的原理是什么?

列置换的加密原理是,明文按行填写在一个矩阵中,而密文则是以预订的顺序按列读取生成的。

如果矩阵是4行5列,那么短语“ENCRYPTIONALGORITHMS”可以如下写入该矩阵中,按一定的顺序读取生成密文

6.给定关键字为“experiment”,加密矩阵将包括几列,以及列置换的次序是什么?

10列置换顺序为1.10.7.2.8.4.5.3.6.9

7.简述对Columnpermutationcipher的分析方法。

a.确定列的可能大小;b.确定正确的矩形;C.还原列的顺序

8.Columnpermutationcipher的安全性增强方法是什么?

进行双重换位加密,先用列换位法将明文加密,然后再次利用列换位法将第一次换位加密的密文加密。

这两次换位所使用的关键词可以相同。

经过两次换位后,明文字母的位置完全被打乱了。

八、结束语

通过本次实验的学习,让我对古典密码又有了一个深层次的认识和学习,而且我的编程能力又有了一个比较大的提升,重新巩固了C语言知识;但是我还发现自己还有许多地方做得不足,有些密码学的知识还是掌握的不够好,不时还得翻书看看,

九、参考文献

1.RichardJ.Spillman:

《CLASSICALANDCONTEMPORARYCRYPTOLOGY》,清华大学出版社,2005-7

2.WilliamStallings:

CryptographyandNetworkSecurity:

PrinciplesandPractice.2nded.PrenticeHall,1998.

3.杨波著:

《现代密码学》,清华大学出版社,2003-8.

4.WenboMao.ModernCryptography:

TheoryandPracticce.电子工业出版社,2004-7.

5.许主洪著:

《加密与解密-密码技术剖析与实战应用》,人民邮电出版社,2002-8.

6.张焕国,刘玉珍著:

《密码学引论》,武汉大学出版社,2003.

7.段钢著:

《加密与解密》,电子工业出版社,2005-3.

实验成绩

考查内容

分数

得分

做好实验内容的预习,写出预习报告

10

了解实验题目的调试方法

10

按实验要求预先设计好程序

10

认真记录实验数据并分析实验结果

10

实验后按要求书写实验报告,记录实验用数据及运行结果

30

创新能力强,在实验中设计的程序有一定的通用性,算法优化

20

实验过程中,具有严谨的学习态度,认真、踏实、一丝不苟的科学作风

10

(附录二)

现代密码学与加解密技术实验报告

实验名称

DES的编程实现

班级

信息安全1201班

学号

20124961

姓名

郑魏献

日期

2014-5-3

成绩

评阅人

软件学院

一、实验目的与意义

加深我们对DES算法的认识,巩固C语言知识,加强我们的编程能力,为我们日后更加深入的学习密码学打下坚实的基础。

二、实验环境

操作系统:

WINDOWSXP

上机地点:

综合楼311

编程软件:

VC++6.0

三、实验的预习内容

密码学DES算法及c语言相关知识

程序框图:

 

四、实验的步骤与调试方法

1.输入64个二进制位明码文数据保存为8*8的二维数组

2.分成左右两个大小相等的部分,每部分为一个32位二进制的数据块

3.首先按照一定规则对密钥进行压缩置换,得到48位子密钥

4.S盒置换

5.P盒置换

6.用替代法和换位法和换位法对上一次迭代的输出进行加密变换

7.置换得到最终密文

五、实验数据与实验结果

明文:

lkjhgfds

秘钥12345678

密文:

A4C7EB3E5937430A

六、实验用程序清单(要有注释)

把DatIn开始的长度位Len位的二进制

复制到DatOut后

voidBitsCopy(bool*DatOut,bool*DatIn,intLen)//数组复制OK

{

inti=0;

for(i=0;i

{

DatOut[i]=DatIn[i];

}

}

字节转换成位函数

每8次换一个字节每次向右移一位

和1与取最后一位共64位

voidByteToBit(bool*DatOut,char*DatIn,intNum)//OK

{

inti=0;

for(i=0;i

{

DatOut[i]=(DatIn[i/8]>>(i%8))&0x01;

}

}

位转换成字节函数

字节数组每8次移一位

位每次向左移与上一次或

---------------------------------*/

voidBitToByte(char*DatOut,bool*DatIn,intNum)//OK

{

inti=0;

for(i=0;i<(Num/8);i++)

{

DatOut[i]=0;

}

for(i=0;i

{

DatOut[i/8]|=DatIn[i]<<(i%8);

}

}

 

/*----------------------------------

二进制密文转换为十六进制

需要16个字符表示

-----------------------------------*/

voidBitToHex(char*DatOut,bool*DatIn,intNum)

{

inti=0;

for(i=0;i

{

DatOut[i]=0;

}

for(i=0;i

{

DatOut[i]=DatIn[i*4]+(DatIn[i*4+1]<<1)

+(DatIn[i*4+2]<<2)+(DatIn[i*4+3]<<3);

if((DatOut[i]%16)>9)

{

DatOut[i]=DatOut[i]%16+'7';//余数大于9时处理10-15toA-F

}//输出字符

else

{

DatOut[i]=DatOut[i]%16+'0';//输出字符

}

}

}

/*---------------------------------------------

十六进制字符转二进制

----------------------------------------------*/

voidHexToBit(bool*DatOut,char*DatIn,intNum)

{

inti=0;//字符型输入

for(i=0;i

{

if((DatIn[i/4])>'9')//大于9

{

DatOut[i]=((DatIn[i/4]-'7')>>(i%4))&0x01;

}

else

{

DatOut[i]=((DatIn[i/4]-'0')>>(i%4))&0x01;

}

}

}

//表置换函数OK

voidTablePermute(bool*DatOut,bool*DatIn,constchar*Table,intNum)

{

inti=0;

staticboolTemp[256]={0};

for(i=0;i

{

Temp[i]=DatIn[Table[i]-1];//原来的数据按对应的表上的位置排列

}

BitsCopy(DatOut,Temp,Num);//把缓存Temp的值输出

}

//子密钥的移位

voidLoopMove(bool*DatIn,intLen,intNum)//循环左移Len数据长度Num移动位数

{

staticboolTemp[256]={0};//缓存OK

BitsCopy(Temp,DatIn,Num);//将数据最左边的Num位(被移出去的)存入Temp

BitsCopy(DatIn,DatIn+Num,Len-Num);//将数据左边开始的第Num移入原来的空间

BitsCopy(DatIn+Len-Num,Temp,Num);//将缓存中移出去的数据加到最右边

}

//按位异或

voidXor(bool*DatA,bool*DatB,intNum)//异或函数

{

inti=0;

for(i=0;i

{

DatA[i]=DatA[i]^DatB[i];//异或

}

}

//输入48位输出32位与Ri异或

voidS_Change(boolDatOut[32],boolDatIn[48])//S盒变换

{

inti,X,Y;//i为8个S盒

for(i=0,Y=0,X=0;i<8;i++,DatIn+=6,DatOut+=4)//每执行一次,输入数据偏移6位

{//每执行一次,输出数据偏移4位

Y=(DatIn[0]<<1)+DatIn[5];//af代表第几行

X=(DatIn[1]<<3)+(DatIn[2]<<2)+(DatIn[3]<<1)+DatIn[4];

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2