版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、-. z. 实验一一、实验名称:替代密码和置换密码的实现二、实验目的:通过编程实现替代密码算法和置换密码算法,加深对古典密码体系的了解,为以后深入学习密码学奠定根底。三、实验内容:A:替代密码1、实验原理:使用替代法进展加密,将明文中的字符用其他字符替代后形成密文。最早的替代密码是由Julius Caesar 创造的Caesar 恺撒密码,又叫循环移位密码。它的加密过程可表示为: E(m) = (m+k ) mod n其中,m为明文字母在字母表中的位置数;n为字母表中的字母个数;k为密钥;E(m)为密文字母在字母表中对应的位置数。解密算法是:m = D(L) =L-kmod 26;2、算法设计
2、:使用两个函数分别进展加密和解密的过程,在主程序中通过选择加密还是解密来调用不同函数进展替代密码的加密和解密过程实现;3、函数接口:加密:int encrypt() printf(输入明文:n); scanf(%s,a); for(i=0;ai!=0;i+) bi=ai-64; printf(输入一位密钥n); scanf(%d,&k); printf(n); for(i=0;bi!=0;i+) mi=(bi+k)%26+64; printf(%s,&m); return 0;解密:int decode() printf(输入密文:n);scanf(%s,a); for(i=0;ai!=0;i
3、+) bi=ai-64; printf(输入一位密钥n); scanf(%d,&k); printf(n); for(i=0;bi!=0;i+) ni=(bi-k)%26+64; printf(%s,n); return 0;程序流程图:测试结果截图:加密:解密:B:实验原理:不改变明文字符,但是把字符在明文中的排列顺序改变,来实现明文信息的加密。置换密码也被称为换位密码。本次实验使用的是矩阵换位法,是将明文中的字母按照给定的顺序安排在一个矩阵中,然后又根据密钥提供的顺序重新组合矩阵中的字母,从而形成密文。解密过程是根据密钥的字母数作为列数,将密文按照列、行的顺序写出,再根据由密钥给出的矩阵置
4、换产生新的矩阵恢复正常顺序,从而恢复明文。2、算法设计:通过选择加密或解密,使用置换矩阵顺序和恢复矩阵顺序的两个函数,分别在主函数中进展调用来实现置换密码的加密解密实现;3、函数接口:加密:int jiami()int i = 0, j = 0, key_len = 0, te*t_len = 0, row = 0;char keyLENGTH = 0 ;char numberLENGTH = 0 ;char pte*tLENGTH * 10 = 0 ;char cte*tLENGTH * 10 = 0 ;printf(输入明文:n);scanf(%s, pte*t);i = 0;while
5、(pte*ti != 0)te*t_len+;i+;printf(输入密钥:n);scanf(%s, key);i = 0;while (keyi != 0)key_len+;i+;for (i = 0; ikey_len; i+)numberi = 0;for (j = 0; jkey_len; j+)if (keyjkeyi)numberi+;for (i = 0; ikey_len; i+)for (j = i + 1; jkey_len; j+)if (keyj = keyi)numberj+;if (te*t_len%key_len = 0)row = te*t_len / key_
6、len;elserow = te*t_len / key_len + 1;for (i = 0; ikey_len; i+)for (j = 0; jrow; j+)cte*ti*row + j = pte*tnumberi + key_len*j;for (i = 0; ikey_len; i+)for (j = 0; jrow; j+)printf(%c, cte*ti*row + j);return 0;解密:int jiemi()int i = 0, j = 0, key_len = 0, te*t_len = 0, row = 0; char key1LENGTH = 0 ;char
7、 pte*t1LENGTH * 10 = 0 ;char cte*t1LENGTH * 10 = 0 ;char number1LENGTH = 0 ;printf(输入密文:n);scanf(%s, cte*t1);while (cte*t1i != 0)te*t_len+;i+;printf(输入密钥);scanf(%s, key1);i = 0;while (key1i != 0)key_len+;i+;for (i = 0; ikey_len; i+)int j = 0;number1i = 0;for (j = 0; jkey_len; j+)if (key1jkey1i)numbe
8、r1i+;for (i = 0; ikey_len; i+)int j = 0;for (j = i + 1; jkey_len; j+)if (key1j = key1i)number1j+;if (te*t_len%key_len = 0)row = te*t_len / key_len;elserow = te*t_len / key_len + 1;for (i = 0; ikey_len; i+)for (j = 0; jrow; j+)pte*t1number1i + key_len*j = cte*t1i*row + j;for (i = 0; ikey_len; i+)for
9、(j = 0; jrow; j+)printf(%c, pte*t1i*row + j);return 0;程序流程图:测试结果截图:三、实验总结: 1、在进展替代密码实现的时候,总是出现程序终止,然后一步步调试,还用了断点测试,最后发现是循环的终止条件设置错误,最后经过了改正,程序能够从正常运行; 2、在进展置换实验的时候,设置的数组总是出错,数量缺乏或排序错误,感觉对这一方面的代码实现有很大的缺乏,置换数组方面忘记了很多概念,应该进展转么的复习; 3、经过这一次的实验,对古典密码中的替代密码和置换密码有了一定的了解,感觉对于密码学有了很浓厚的兴趣,想要进一步了解一些密码的算法和实现的方法;
10、 4、感觉一个假期没有编程,忘记了很多语句和各种根本知识,感觉应该再系统地复习一遍,再多加练习。四、问题答复:替代密码:分析密文中的字母频率后将可以对照破解;可能严重偏离标准频率,参加文章少于100个字母,则对它的解密就会比拟困难。 改良:在单一恺撒密码的根底上扩展出多表密码,称为维吉尼亚密码。引入了密钥的概念,即根据密钥来决定用哪一行的密表来进展替换,可以对抗字频统计。五、实验代码:替代密码: #include #include #includeint k,i=0;char a100;char b100,m100,n100;int encrypt() printf(输入明文:n); scan
11、f(%s,a); for(i=0;ai!=0;i+) bi=ai-64; printf(输入一位密钥n); scanf(%d,&k); printf(n); for(i=0;bi!=0;i+) mi=(bi+k)%26+64; printf(%s,&m); return 0;int decode() printf(输入密文:n);scanf(%s,a); for(i=0;ai!=0;i+) bi=ai-64; printf(输入一位密钥n); scanf(%d,&k); printf(n); for(i=0;bi!=0;i+) ni=(bi-k)%26+64; printf(%s,n); re
12、turn 0;int main()int c;printf(加密选择1,解密选择2 n);scanf(%d,&c);if(c=1)encrypt(); if(c=2)decode();return 0;B、置换密码:#include#include#defineLENGTH 26int jiami()int i = 0, j = 0, key_len = 0, te*t_len = 0, row = 0;char keyLENGTH = 0 ;char numberLENGTH = 0 ;char pte*tLENGTH * 10 = 0 ;char cte*tLENGTH * 10 = 0
13、;printf(输入明文:n);scanf(%s, pte*t);i = 0;while (pte*ti != 0)te*t_len+;i+;printf(输入密钥:n);scanf(%s, key);i = 0;while (keyi != 0)key_len+;i+;for (i = 0; ikey_len; i+)numberi = 0;for (j = 0; jkey_len; j+)if (keyjkeyi)numberi+;for (i = 0; ikey_len; i+)for (j = i + 1; jkey_len; j+)if (keyj = keyi)numberj+;i
14、f (te*t_len%key_len = 0)row = te*t_len / key_len;elserow = te*t_len / key_len + 1;for (i = 0; ikey_len; i+)for (j = 0; jrow; j+)cte*ti*row + j = pte*tnumberi + key_len*j;for (i = 0; ikey_len; i+)for (j = 0; jrow; j+)printf(%c, cte*ti*row + j);return 0;int jiemi()int i = 0, j = 0, key_len = 0, te*t_l
15、en = 0, row = 0; char key1LENGTH = 0 ;char pte*t1LENGTH * 10 = 0 ;char cte*t1LENGTH * 10 = 0 ;char number1LENGTH = 0 ;printf(输入密文:n);scanf(%s, cte*t1);while (cte*t1i != 0)te*t_len+;i+;printf(输入密钥);scanf(%s, key1);i = 0;while (key1i != 0)key_len+;i+;for (i = 0; ikey_len; i+)int j = 0;number1i = 0;for (j = 0; jkey_len; j+)if (key1jkey1i)number1i+;for (i = 0; ikey_len; i+)int j = 0;for (j = i + 1; jkey_len; j+)if (key1j = key1i)number1j+;if (te*t_len%key_len = 0)row = te*t_len / key_len;elserow = te*t_len / key_len + 1;for (i = 0; ikey_len; i+
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年传染病防治兽药项目规划申请报告
- 2025年建筑安装服务项目提案报告
- 2024-2025学年砚山县数学三上期末质量检测试题含解析
- 2025年果蔬罐头加工项目提案报告
- 2025年低碳小镇项目规划申请报告模板
- 专家邀请函范文锦集六篇
- 质量承诺书模板集合8篇
- 上海装修施工合同
- 学生军训心得体会(集合15篇)
- 电子商务实习自我鉴定9篇
- 小学数学班级学情分析报告
- IMCA船舶隐患排查表
- 2024年软件开发调试合同样本(二篇)
- 地理月考分析及改进措施初中生
- 乡村篮球比赛预案设计
- 博物馆保安服务投标方案(技术方案)
- 陕西省幼儿教师通识性知识大赛考试题库(含答案)
- 中医师承指导老师学术思想
- 课程设计报告数据库原理与应用样本
- 2024年北京控股集团有限公司招聘笔试参考题库含答案解析
- (完整word版)体检报告单模版
评论
0/150
提交评论