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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

替代密码和置换密码的C语言实现.docx

1、替代密码和置换密码的C语言实现 实验一一、实验名称:替代密码与置换密码的实现二、实验目的:通过编程实现替代密码算法与置换密码算法,加深对古典密码体系的了解,为以后深入学习密码学奠定基础。三、实验内容:A:替代密码1、实验原理:使用替代法进行加密,将明文中的字符用其她字符替代后形成密文。最早的替代密码就是由Julius Caesar 发明的Caesar (恺撒)密码,又叫循环移位密码。它的加密过程可表示为: E(m) = (m+k ) mod n其中,m为明文字母在字母表中的位置数;n为字母表中的字母个数;k为密钥;E(m)为密文字母在字母表中对应的位置数。解密算法就是:m = D(L) =(L

2、-k)mod 26;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)

3、; 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); return 0;4、程序流程图:5、测试结果截图:加密:解密:B:1、实验原理:不改变明文字符,但就是把字符在明文中的排列顺序改变,来实现明文信息的加密。置换密码也被称为换位密码。本次实验使用的就是矩阵换位法,就是将明文中的字母按照给定的顺序安排在一个矩阵中,然后又根据密钥提供的顺序重新组合矩阵中的字母,从而形成密文。解密过程就是根据密钥的字母数作为列数

4、,将密文按照列、行的顺序写出,再根据由密钥给出的矩阵置换产生新的矩阵恢复正常顺序,从而恢复明文。2、算法设计:通过选择加密或解密,使用置换矩阵顺序与恢复矩阵顺序的两个函数,分别在主函数中进行调用来实现置换密码的加密解密实现;3、函数接口:加密:int jiami() int i = 0, j = 0, key_len = 0, text_len = 0, row = 0; char keyLENGTH = 0 ; char numberLENGTH = 0 ; char ptextLENGTH * 10 = 0 ; char ctextLENGTH * 10 = 0 ; printf(输入明文

5、:n); scanf(%s, ptext); i = 0; while (ptexti != 0) text_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) nu

6、mberj+; if (text_len%key_len = 0) row = text_len / key_len; else row = text_len / key_len + 1; for (i = 0; ikey_len; i+) for (j = 0; jrow; j+) ctexti*row + j = ptextnumberi + key_len*j; for (i = 0; ikey_len; i+) for (j = 0; jrow; j+) printf(%c, ctexti*row + j); return 0;解密:int jiemi() int i = 0, j =

7、 0, key_len = 0, text_len = 0, row = 0; char key1LENGTH = 0 ; char ptext1LENGTH * 10 = 0 ; char ctext1LENGTH * 10 = 0 ; char number1LENGTH = 0 ; printf(输入密文:n); scanf(%s, ctext1); while (ctext1i != 0) text_len+; i+; printf(输入密钥); scanf(%s, key1); i = 0; while (key1i != 0) key_len+; i+; for (i = 0; i

8、key_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 (text_len%key_len = 0) row = text_len / key_len; else row = text_len / key_len + 1; for (i = 0; ikey_len; i+)

9、 for (j = 0; jrow; j+) ptext1number1i + key_len*j = ctext1i*row + j; for (i = 0; ikey_len; i+) for (j = 0; jrow; j+) printf(%c, ptext1i*row + j); return 0;4、程序流程图:5、测试结果截图:三、实验总结: 1、在进行替代密码实现的时候,总就是出现程序终止,然后一步步调试,还用了断点测试,最后发现就是循环的终止条件设置错误,最后经过了改正,程序能够从正常运行; 2、在进行置换实验的时候,设置的数组总就是出错,数量不足或排序错误,感觉对这一方面的

10、代码实现有很大的不足,置换数组方面忘记了很多概念,应该进行转么的复习; 3、经过这一次的实验,对古典密码中的替代密码与置换密码有了一定的了解,感觉对于密码学有了很浓厚的兴趣,想要进一步了解一些密码的算法与实现的方法; 4、感觉一个假期没有编程,忘记了很多语句与各种基本知识,感觉应该再系统地复习一遍,再多加练习。四、问题回答:替代密码:分析密文中的字母频率后将可以对照破解;可能严重偏离标准频率,加入文章少于100个字母,那么对它的解密就会比较困难。 改进:在单一恺撒密码的基础上扩展出多表密码,称为维吉尼亚密码。引入了密钥的概念,即根据密钥来决定用哪一行的密表来进行替换,可以对抗字频统计。五、实验

11、代码:A、替代密码: #include #include #includeint k,i=0;char a100;char b100,m100,n100;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

12、!=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); return 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 #define LENGTH 26int jiami() int i = 0, j = 0, key_len =

13、 0, text_len = 0, row = 0; char keyLENGTH = 0 ; char numberLENGTH = 0 ; char ptextLENGTH * 10 = 0 ; char ctextLENGTH * 10 = 0 ; printf(输入明文:n); scanf(%s, ptext); i = 0; while (ptexti != 0) text_len+; i+; printf(输入密钥:n); scanf(%s, key); i = 0; while (keyi != 0) key_len+; i+; for (i = 0; ikey_len; i+)

14、 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 (text_len%key_len = 0) row = text_len / key_len; else row = text_len / key_len + 1; for (i = 0; ikey_len; i+) for (j = 0; jrow; j+) ctexti*row + j = p

15、textnumberi + key_len*j; for (i = 0; ikey_len; i+) for (j = 0; jrow; j+) printf(%c, ctexti*row + j); return 0;int jiemi() int i = 0, j = 0, key_len = 0, text_len = 0, row = 0; char key1LENGTH = 0 ; char ptext1LENGTH * 10 = 0 ; char ctext1LENGTH * 10 = 0 ; char number1LENGTH = 0 ; printf(输入密文:n); sca

16、nf(%s, ctext1); while (ctext1i != 0) text_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 (ke

17、y1j = key1i) number1j+; if (text_len%key_len = 0) row = text_len / key_len; else row = text_len / key_len + 1; for (i = 0; ikey_len; i+) for (j = 0; jrow; j+) ptext1number1i + key_len*j = ctext1i*row + j; for (i = 0; ikey_len; i+) for (j = 0; jrow; j+) printf(%c, ptext1i*row + j); return 0;int main() int a; printf(加密选择1,解密选择2); scanf(%d, &a); if (a = 1) jiami(); else if (a = 2) jiemi(); return 0;

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

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