ImageVerifierCode 换一换
格式:DOCX , 页数:26 ,大小:130.23KB ,
资源ID:2468668      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-2468668.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(现代密码学与加解密技术实验报告.docx)为本站会员(b****1)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

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

1、现代密码学与加解密技术实验报告现代密码学与加解密技术实验一、 实验教学目标与基本要求现代密码学与加解密技术实验是本课程重要的实践教学环节。实验的目的不仅仅是验证理论知识,更重要的是通过实验加强学生的实验手段与实践技能,培养学生分析问题、解决问题、应用知识的能力和创新精神,全面提高学生的综合素质。通过本实验简要了解密码学以及现代密码算法的基本知识,学会常用文件加密的实现、了解系统加密解密技术,具体掌握几种加解密方法。实验后完成要求撰写实验报告,报告内容包括题目、测试数据、运行结果、遇到的问题和解决方法、关键代码或程序清单,学生可以在实验报告中提出对实验的建议和意见。二、 实验项目及教学安排序号实

2、验项目名称基本内容实验学时每组人数实验要求实验类型1Vigenere的编程实现编程(建议使用C语言)实现古典密码体制中的Vigenere密码,并加/解密一个字符串或文件21必修设计性2Column permutation cipher 的编程实现编程(建议使用C语言)实现古典密码体制中的Column permutation密码,并加/解密一个字符串或文件21必修设计性3DES的编程实现使用C语言设计实现DES密码,并加密一个文件41必修设计性三、 实验成绩考核办法 每次实验后,要求从以下几个方面书写实验报告:实验题目,程序清单,实验用数据及结果,学生可以在实验报告中提出对实验的建议和意见。实验

3、成绩满分100分,并按10%折算记入课程总成绩,实验成绩不合格者不得参加期末考试。实验成绩按下面7条进行考核评定。(1)做好实验内容的预习,写出预习报告;占10%。(2)了解实验题目的调试方法;占10%。(3)按实验要求预先设计好程序;占10%。(4)认真记录实验数据并分析实验结果;占10%。(5)实验后按要求书写实验报告,记录实验用数据及运行结果;占30%。(6)创新能力强,在实验中设计的程序有一定的通用性,算法优化;20%。(7)实验过程中,具有严谨的学习态度,认真、踏实、一丝不苟的科学作风;10%四、 实验教材及参考书1.Richard J.Spillman:CLASSICAL AND

4、CONTEMPORARY CRYPTOLOGY,清华大学出版社,2005-72.William Stallings: Cryptography and Network Security: Principles and Practice. 2nd ed. Prentice Hall, 1998.3.杨波著:现代密码学,清华大学出版社,2003-8.4.Wenbo Mao. Modern Cryptography: Theory and Practicce. 电子工业出版社,2004-7.5许主洪著:加密与解密-密码技术剖析与实战应用,人民邮电出版社,2002-8.6张焕国,刘玉珍著:密码学引论,

5、武汉大学出版社,2003.7段钢著:加密与解密,电子工业出版社,2005-3.五、实验内容与报告的要求实验1、2的内容要求(提示性的)与封面见附录一(打印时将“附录一”3个字去掉)。实验3的内容要求(提示性的)与封面见附录二(打印时将“附录二”3个字去掉)。严禁互相抄袭!一经发现抄袭者与被抄袭者全无成绩!五、时间与场地第7、9周,周一9-12节;综合楼311,软信1201-03班(附录一)现代密码学与加解密技术实验报告 实验名称Vigenere和Column permutation cipher的编程实现班 级信息安全一班学 号20124961姓 名郑魏献日 期2014-5-3成 绩评 阅 人

6、软件学院一、 实验目的与意义 通过编程实现Vigenere和Column permutation cipher密码算法,加深了我们对古典密码学的了解,这也为我们深入学习密码学奠定了坚实的基础。二、 实验环境操作系统:Windows XP上级地点:综合楼311编程软件:VC+ 6.0三、 实验的预习内容密码学基础vigenere算法、Column permutation cipher算法相关知识。四、 实验的步骤与调试方法 Vigenere:加密:实验步骤:1获得秘钥2创建加密矩阵3获得明文4加密5得到密文 解密:实验步骤:1获得秘钥2创建加密矩阵3获得密文4解密5获得明文 Column per

7、mutation:加密:实验步骤:1获得明文2将明文按长度D分3加密4获得密文 解密:实验步骤:1输入密文2从F中找到密文对应位置的数3根据位置置换密文的明文4解密5获得明文五、 实验数据与实验结果 Vigenere:1 明文:woshidongbeidaxuexuesheng 关键字:line 密文:hwfltlbroikypfhidprrr 2 密文:scehvvvantciarrj 关键字:woman 明文:woshizhongguoren Column permutation:1 明文:woshizhongguoren关键字:line密文:sygeozgrhounwino2密文:wos

8、hidongbeidaxuexuesheng关键字:line明文:uowdenoasgsxhbhueeisnidx六、 实验用程序清单(要有注释)vigenere/*初始化vigenere方阵*/for(i=1;i27;i+) for(j=1;j90) squareij=squareij-26;for(k=1;k27;k+) for(m=1;m27;m+) printf(%c ,squarekm); printf(n);/*加密算法*/char * vigenere(char key,char word) char *text=(char *)malloc(MAX*sizeof(char);

9、int key_length=strlen(key); int word_length=strlen(word); int i,j,c; for(i=0;i=65&wordi=97&wordi=97&wordi=122) c=wordi-96; else c=wordi-64; j=i%key_length; texti=squarekeyj-96c; else texti=wordi; texti=0; return text;/*解密算法*/char * anti_vigenere(char key,char * en_word) char *word=(char *)malloc(MAX

10、*sizeof(char); int key_length=strlen(key); int word_length=strlen(en_word); int i,j,c,k,d; for(i=0;i=65&en_wordi=0) wordi=a+d; else wordi=z+d+1; else wordi=en_wordi; wordi=0; return word;Column permutetion 加密void Encryption(char str1,char key) int i,j; char num300; int plen=strlen(str1); int len=str

11、len(key); for(i=0;ilen;i+) numi=1; for(j=0;jlen;j+) if(keyjkeyi) numi+; for(j=0;ji;j+) if(keyj = keyi) numi=numi+1; printf(n); for(i=0;ilen;i+) for(j=0;jplen/len;j+) printf(%c,str1j*len+numi-1); printf( ); printf(n); 解密void Decryption(char key,char str3) int i,j; char num500; char cnum500; int clen=

12、strlen(str3); int len=strlen(key); for(i=0;ilen;i+) numi=1; for(j=0;jlen;j+) if(keyjkeyi) numi+; for(j=0;ji;j+) if(keyj = keyi) numi=numi+1; for(i=0;ilen;i+) for(j=0;jlen;j+) if(i+1=numj) cnumi=j; for(i=0;iclen/len;i+) for(j=0;jlen;j+) printf(%c,str3cnumj*clen/len+i); printf( ); printf(n);七、 思考题(必需回

13、答)写明如下问题1. Vigenere密码的原理是什么? Vigenere加密法是基于关键词的加密系统,但不是像单码关键词加密法那样使用关键词来定义替换模式的,关键词写在明文的上面,并不断重复书写,这样每个明文字母都与一个关键词的字母关联。例如,如果关键词为hold,而明文为this is the plaintext,那么,关键词明文的关联如下所示:h o l d h o l d h o l d h o l d h ot h i s i s t h e p l a i n t e x t每个明文字母与关键词的一个字母对应。例如,第一个明文字母t与关键词的字母h配对。利用如下图所示的Vigene

14、re表,在密钥字母确定的行和明文字母确定的列交叉处的字母即为用来替代明文字母的密文字母。例如上面例子中第一对是h-t,在下表中查找h行和t列的交叉处,即为密文字母a。重复以上过程可以生成以下的密文:密钥 h o l d h o l d h o l d h o l d h o明文 t h i s i s t h e p l a i n t e x t密文 a v t v p g e k l d w d p b e h d h2. Vigenere密码的主要缺陷有哪些? 不能经受住频率分析的攻击方法3. 对Vigenere密码的分析方法有哪几种? Vigenere密码是一个基于单表置换的分块对称加

15、密算法。将明文T分为长度为n的若干块(若最后一块不足则用随机数补满),密钥K长度为n。在加密时对每个明文分块Ti做Ci=(Ti+Ki)%m,解密时对每个密文分块Ci做Ti=(Ci-Ki)%m,其中m为字符空间大小。 显然,该加密算法是一个不安全的加密算法。Vigenere算法有着致命的缺陷Ki=(Ci-Ti)%m,使得他可以被已知明文攻击完全破解。同时,利用Friedman攻击也能够完全破解该算法,只是破解难度稍大。但是,我们也可以看到,这两种破解都有着一个共同的假设:密钥长度n小于明文的长度,即相同的明文字符可能多次被相同的密钥字符加密,生成相同的密文字符。 4. 对Vigenere密码的改

16、进方法是什么? 使用长度分别为m和n的两个密钥来进行两轮加密,等效于使用密钥长度为m和n的最小公倍数的一个密钥进行一轮的加密(证明略)。这样,如果m、n互质,我们实际上就做到了使用长度为m+n的密钥来代替长度为m*n的密钥,从而大大的降低了密钥的长度5. Column permutation cipher 的原理是什么? 列置换的加密原理是,明文按行填写在一个矩阵中,而密文则是以预订的顺序按列读取生成的。如果矩阵是4行5列,那么短语“ENCRYPTION ALGORITHMS” 可以如下写入该矩阵中,按一定的顺序读取生成密文6. 给定关键字为“experiment”,加密矩阵将包括几列,以及列

17、置换的次序是什么? 10列 置换顺序为1.10.7.2.8.4.5.3.6.97. 简述对Column permutation cipher的分析方法。 a.确定列的可能大小;b.确定正确的矩形; C.还原列的顺序8. Column permutation cipher的安全性增强方法是什么? 进行双重换位加密,先用列换位法将明文加密,然后再次利用列换位法将第一次换位加密的密文加密。这两次换位所使用的关键词可以相同。经过两次换位后,明文字母的位置完全被打乱了。八、 结束语通过本次实验的学习,让我对古典密码又有了一个深层次的认识和学习,而且我的编程能力又有了一个比较大的提升,重新巩固了C语言知识

18、;但是我还发现自己还有许多地方做得不足,有些密码学的知识还是掌握的不够好,不时还得翻书看看,九、 参考文献1.Richard J.Spillman:CLASSICAL AND CONTEMPORARY CRYPTOLOGY,清华大学出版社,2005-72.William Stallings: Cryptography and Network Security: Principles and Practice. 2nd ed. Prentice Hall, 1998.3.杨波著:现代密码学,清华大学出版社,2003-8. 4.Wenbo Mao. Modern Cryptography: The

19、ory and Practicce. 电子工业出版社,2004-7. 5许主洪著:加密与解密-密码技术剖析与实战应用,人民邮电出版社,2002-8. 6张焕国,刘玉珍著:密码学引论,武汉大学出版社,2003. 7段钢著:加密与解密,电子工业出版社,2005-3.实验成绩考查内容分数得分做好实验内容的预习,写出预习报告10了解实验题目的调试方法10按实验要求预先设计好程序10认真记录实验数据并分析实验结果10实验后按要求书写实验报告,记录实验用数据及运行结果30创新能力强,在实验中设计的程序有一定的通用性,算法优化20实验过程中,具有严谨的学习态度,认真、踏实、一丝不苟的科学作风10(附录二)现

20、代密码学与加解密技术实验报告 实验名称DES的编程实现班 级信息安全1201班学 号20124961姓 名郑魏献日 期2014-5-3成 绩评 阅 人 软件学院一、 实验目的与意义加深我们对DES算法的认识,巩固C语言知识,加强我们的编程能力,为我们日后更加深入的学习密码学打下坚实的基础。二、 实验环境 操作系统:WINDOWS XP 上机地点:综合楼311 编程软件:VC+ 6.0三、 实验的预习内容 密码学DES算法及c语言相关知识程序框图:四、 实验的步骤与调试方法 1. 输入64个二进制位明码文数据保存为8*8的二维数组 2. 分成左右两个大小相等的部分,每部分为一个32位二进制的数据

21、块 3. 首先按照一定规则对密钥进行压缩置换,得到48位子密钥 4. S盒置换 5 . P盒置换 6. 用替代法和换位法和换位法对上一次迭代的输出进行加密变换 7. 置换得到最终密文五、 实验数据与实验结果明文:lkjhgfds秘钥12345678密文:A4C7EB3E5937430A六、 实验用程序清单(要有注释) 把DatIn开始的长度位Len位的二进制 复制到DatOut后void BitsCopy(bool *DatOut,bool *DatIn,int Len) / 数组复制 OK int i=0; for(i=0;iLen;i+) DatOuti=DatIni; 字节转换成位函数

22、每8次换一个字节 每次向右移一位 和1与取最后一位 共64位 void ByteToBit(bool *DatOut,char *DatIn,int Num) / OK int i=0; for(i=0;i(i%8)&0x01; 位转换成字节函数 字节数组每8次移一位 位每次向左移 与上一次或 -*/void BitToByte(char *DatOut,bool *DatIn,int Num) / OK int i=0; for(i=0;i(Num/8);i+) DatOuti=0; for(i=0;iNum;i+) DatOuti/8|=DatIni(i%8); /*- 二进制密文转换为十

23、六进制 需要16个字符表示-*/void BitToHex(char *DatOut,bool *DatIn,int Num) int i=0; for(i=0;iNum/4;i+) DatOuti=0; for(i=0;iNum/4;i+) DatOuti = DatIni*4+(DatIni*4+11) +(DatIni*4+22)+(DatIni*4+39) DatOuti=DatOuti%16+7; / 余数大于9时处理 10-15 to A-F / 输出字符 else DatOuti=DatOuti%16+0; / 输出字符 /*- 十六进制字符转二进制-*/void HexToBi

24、t(bool *DatOut,char *DatIn,int Num) int i=0; / 字符型输入 for(i=0;i9) / 大于9 DatOuti=(DatIni/4-7)(i%4)&0x01; else DatOuti=(DatIni/4-0)(i%4)&0x01; / 表置换函数 OKvoid TablePermute(bool *DatOut,bool *DatIn,const char *Table,int Num) int i=0; static bool Temp256=0; for(i=0;iNum;i+) / Num为置换的长度 Tempi=DatInTablei-1

25、; / 原来的数据按对应的表上的位置排列 BitsCopy(DatOut,Temp,Num); / 把缓存Temp的值输出 / 子密钥的移位void LoopMove(bool *DatIn,int Len,int Num) / 循环左移 Len数据长度 Num移动位数 static bool Temp256=0; / 缓存 OK BitsCopy(Temp,DatIn,Num); / 将数据最左边的Num位(被移出去的)存入Temp BitsCopy(DatIn,DatIn+Num,Len-Num); / 将数据左边开始的第Num移入原来的空间 BitsCopy(DatIn+Len-Num,

26、Temp,Num); / 将缓存中移出去的数据加到最右边 / 按位异或void Xor(bool *DatA,bool *DatB,int Num) / 异或函数 int i=0; for(i=0;iNum;i+) DatAi=DatAiDatBi; / 异或 / 输入48位 输出32位 与Ri异或void S_Change(bool DatOut32,bool DatIn48) / S盒变换 int i,X,Y; / i为8个S盒 for(i=0,Y=0,X=0;i8;i+,DatIn+=6,DatOut+=4) / 每执行一次,输入数据偏移6位 / 每执行一次,输出数据偏移4位 Y=(DatIn01)+DatIn5; / af代表第几行 X=(DatIn13)+(DatIn22)+(DatIn31)+DatIn4;

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

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