现代密码学与加解密技术实验报告.docx
- 文档编号:11951347
- 上传时间:2023-04-16
- 格式:DOCX
- 页数:26
- 大小:130.23KB
现代密码学与加解密技术实验报告.docx
《现代密码学与加解密技术实验报告.docx》由会员分享,可在线阅读,更多相关《现代密码学与加解密技术实验报告.docx(26页珍藏版)》请在冰豆网上搜索。
现代密码学与加解密技术实验报告
现代密码学与加解密技术实验
一、实验教学目标与基本要求
现代密码学与加解密技术实验是本课程重要的实践教学环节。
实验的目的不仅仅是验证理论知识,更重要的是通过实验加强学生的实验手段与实践技能,培养学生分析问题、解决问题、应用知识的能力和创新精神,全面提高学生的综合素质。
通过本实验简要了解密码学以及现代密码算法的基本知识,学会常用文件加密的实现、了解系统加密解密技术,具体掌握几种加解密方法。
实验后完成要求撰写实验报告,报告内容包括题目、测试数据、运行结果、遇到的问题和解决方法、关键代码或程序清单,学生可以在实验报告中提出对实验的建议和意见。
二、实验项目及教学安排
序号
实验项目名称
基本内容
实验学时
每组人数
实验要求
实验
类型
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];
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 现代 密码学 解密 技术 实验 报告