已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
中 北 大 学 软 件 学 院实 验 报 告专 业: 软件工程 方 向: 软件开发与测试 课程名称: 信息安全原理与技术 班 级: 10210A01 学 号: 1021010113 姓 名: 郝娜娜 辅导教师: 李瑞红 2013 年 6 月 成绩: 实验时间 年 月 日 时至 时学时数1. 实验名称 实验一:古典密码算法2. 实验目的 通过编程实现替代密码算法和置换密码算法,加深对古典密码体制的了解,为深入学习密码学奠定基础。3. 实验内容 根据实验原理部分对替代密码算法的介绍,自己创建明文信息,并选择一个密钥,编写替代密码算法的实现程序,实现加密和解密操作。 根据实验原理部分对置换密码算法的介绍,自己创建明文信息,并选择一个密钥,编写置换密码算法的实现程序,实现加密和解密操作。4. 实验原理或流程图 替换密码 替换密码算法的原理是使用替代法进行加密,就是将明文中的字符用其它字符替代后形成密文。例如明文字母a、b、c、d,用D、E、F、G做对应替换后形成密文。 替换密码包括多种类型,如单表替代密码、多明码替代密码、多字母替代密码、多表替代密码等。下面我们介绍一种典型的单表替代密码凯撒密码,又叫循环移位密码。它的加密方法就是将明文中的每个字母用此字符在字母表中后面第k个字母替代。它的加密过程可以表示为下面的函数: Ek (m)=(m+k) mod n 其中,m为明文字母在字母表中的位置数;n为字母表中的字母个数;k为密钥;Ek (m)为密文字母在字母表中对应的位置数。 置换密码 置换密码算法的原理是不改变明文字符,只将字符在明文中的排列顺序改变,从而实现明文信息的加密。置换密码有时又称为换位密码。 矩阵换位法是实现置换密码的一种常用方法。它将明文中的字母按照给定的顺序安排在一个矩阵中,然后用根据密钥提供的顺序重新组合矩阵中的字母,从而形成密文。5. 实验过程或源代码一、 替换密码#include#include#define CRYPT_OK 1#define CRYPT_ERROR 0/替换;int encrypt();int decrypt();char cipher45;/密文char procla45;/明文int main() int k;/替换密码的密钥 int n=26;/字母表中字母的个数 printf(加密:n); encrypt(); printf(解密:n); decrypt(); return 0;int encrypt() int n=26; int k; int i; printf(请输入密钥); scanf(%d,&k); getchar(); printf(该实验的字符仅限小写字母a到zn); printf(请输入明文:n);gets(procla);int len=strlen(procla);for(i=0;ilen;i+)cipheri=(proclai-k-97+26)%n+97;printf(密文是:);puts(cipher); return CRYPT_OK;int decrypt() int n=26; int k; int i; printf(请输入密钥); scanf(%d,&k); getchar(); printf(该实验的字符仅限小写字母a到zn); printf(请输入密文n);gets(cipher);int len=strlen(cipher);for(i=0;ilen;i+)proclai=(cipheri-97+k)%n+97;printf(明文是:);puts(procla); return CRYPT_OK;运行结果:二置换密码#include#include#define CRYPT_OK 1#define CRYPT_ERROR 0#define keyLen 6#define charNum 26#define cipherLen 48/替代与置换;void juzheng(int k2);int encrypt();int decrypt();char ciphercipherLen;/密文char proclacipherLen;/明文int main() printf(加密:n); encrypt(); printf(解密:n); decrypt(); return 0;void juzheng(int k2) /存放密钥中的字母在字母表忠出现的先后顺序,放到k2中,即置换矩阵 char keykeyLen;/密钥长度 int cixu=0; printf(请输入密钥);/密钥为:cipher scanf(%s,&key); getchar(); int i,j; for(i=0; i26; i+) for(j=0; j6; j+) if(keyj=97+i) k2cixu=j; cixu+=1; int encrypt() int n=charNum;/字符个数 int k2keyLen; int i; char shuzucipherLen/keyLenkeyLen; juzheng(k2); printf(该实验的字符仅限小写字母a到zn); printf(请输入明文:n);/输入语句:attack begins at five gets(procla); int len=strlen(procla); int j=0; int k=0; /对明文放到列为6的shuzu数组中,去掉空格,列的长度为密钥的长度, for(i=0; ilen; i+) if(proclai!= ) shuzukj=proclai; j+=1; if(j%6=0) j=0; k+=1; /将置换后的明文保存到数组shuzu2中 int l; int shuzu286; for(i=0; istrlen(procla)/6; i+) for(j=0; j6; j+) l=k2j; shuzu2ij=shuzuil; /printf(%c,shuzuil); / printf(n); /输出密文 printf(则密文为:); for(j=0; j6; j+) l=k2j; for(i=0; istrlen(procla)/6; i+) printf(%c,shuzu2il); printf(n); return CRYPT_OK;int decrypt() int n=charNum; int k2keyLen; int i; char shuzucipherLen/keyLenkeyLen; juzheng(k2); printf(该实验的字符仅限小写字母a到zn); printf(请输入密文:n); gets(cipher); int len=strlen(cipher); int j=0; int k=0; /将密文放入数组中 for(i=0; ilen; i+) shuzujk=cipheri; j+=1; if(j%(len/keyLen)=0) j=0; k+=1; int l; int shuzu2cipherLen/keyLenkeyLen; for(i=0; istrlen(cipher)/keyLen; i+) for(j=0; j6; j+) l=k2j; shuzu2ij=shuzuil; / printf(%c,shuzuil); / printf(n); printf(则明文为:); for(i=0; istrlen(cipher)/6; i+) for(j=0; j6; j+) l=k2j; printf(%c,shuzu2il); return CRYPT_OK;6. 实验结论及心得 通过实验,更加深入的了解了古典密码算法中的替换密码算法和置换密码算法,知道了两种算法的原理和运行过程。 成绩: 实验时间 年 月 日 时至 时学时数1. 实验名称 实验一:非对称密码算法RSA2.实验目的 通过实际编程了解非对称密码算法RSA的加密和解密过程,加深对非对称密码算法的认识。3.实验内容(1)为了加深对RSA算法的了解,根据已知参数:p=3,q=11,M=2,手工计算公私钥,并对明文进行加密,然后对密文进行解密。(2)了解RSA算法原理。写一段用RSA加密文件的程序。4. 实验原理或流程图前面讲的对称密码算法要求通信双方通过交换密钥实现使用同一个密钥,这在密钥的管理、发布和安全性方面存在很多问题,而非对称密码算法解决了这个问题。 非对称密码算法是指一个加密系统的加密密钥和解密密钥是不同的,或者说不能用其中的一个推导出另一个。在非对称密码算法的两个密钥中,一个是用于加密的密钥,它是可以公开的,成为公钥;另一个是用于解密的密钥,是保密的,成为私钥。非对称密钥算法解决了对称密钥体制中密钥管理的难题,并提供了对信息发送人的身份进行验证的手段,是现代密码学最重要的发明。 RSA密码体制是目前为止最成功的非对称密码算法,它是在1977年由Rivest、Shamir和Adleman提出的第一个比较完善的非对称密码算法。它的安全性是建立在“大数分解和素数检测”这个数论难题的基础上,即将两个大素数相乘在计算上容易实现,而将该乘积分解为两个大素数因子的计算量相当大。虽然它的安全性还未能得到理论证明,但经过20多年的密码分析和攻击,迄今仍然被实践证明是安全的。RSA 算法描述如下:1. 密钥生成 先任意选取两个大素数p和q,计算n=pq和欧拉函数(n)=(p-1)(q-1)。任选一个与(n)互素的d。求出e,满足ed =1mod(n)。(e,n)作为公钥,(p,q,d)为私钥。2. 加密算法 对于明文M,由C=Me mod n得到密文C。3. 解密算法 对于密文C,M=Cdmod n得到明文M。4. 验证 Cd mod n=(Me)d mod n =Mt (n)+1 mod n =Mt (n) .Mxmod n =1t.Mmod n =Mmod n RSA的缺点:产生密钥受到素数产生技术的限制;为了保证安全性,n至少也要1024位以上,因为长度大于1024位的大整数的分解任是计算上的困难问题,但这又使运算速度降低。5. 实验过程或源代码#includeint candp(int m,int e,int n) /数据处理函数,实现幂的取余运算 int r=1; e=e+1; while(e!=1) r=r*m; r=r%n; e-; printf(%dn,r); return r;int fun(int x,int y) /公钥e与t的互素判断 int t; while(y) t=x; x=y; y=t%y; if(x=1) return 0; /互素 else return 1; /不互素int main() int p,q,e,d,n,t,m,c; /t为欧拉函数的值 /r判断是加密还是解密 / m为明文,c为密文 / (e,n)作为公钥,(p,q,d)为私钥。 printf(请输入两个素数p,q); scanf(%d%d,&p,&q); n=p*q; printf(计算的n为:%3dn,n); t=(p-1)*(q-1); /求得n的欧拉函数 printf(计算得t为:%3dn,t); printf(请输入公钥 e:); scanf(%d,&e); if(et|fun(e,t) printf(e 不合要求,请重新输入:); scanf(%d,&e); / ed =1mod(n) d=1; while(e*d)%t)!=1) d+; /公钥e求出私钥d printf(经计算d为 %dn,d); printf(加密请输入1n); printf(解密请输入2n); int r=0; scanf(%d,&r)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 卧式硫化罐项目可行性分析报告范文(总投资12000万元)
- 2026-2031中国纳米氧化铝行业市场供需预测报告
- 2026-2031中国过滤设备行业分析与未来发展趋势报告
- 2026-2031中国和田玉行业市场发展战略分析及投资前景专项预测报告
- 河道底部水管施工方案设计
- 临东路封闭施工方案
- 桥梁牛角钢板立柱施工方案
- 隔楼永久防水施工方案
- 感应式洗手台施工方案
- 旧石头路翻新施工方案
- 牧场物语-矿石镇的伙伴们-完全攻略
- ISO 22003-1:2022《食品安全-第 1 部分:食品安全管理体系 审核与认证机构要求》中文版(机翻)
- 预防医学练习题库(附答案)
- 研究生学术表达能力培养智慧树知到答案2024年西安建筑科技大学、清华大学、同济大学、山东大学、河北工程大学、《环境工程》英文版和《环境工程》编辑部
- 中国骨关节炎诊疗指南(2024版)解读
- 马铃薯淀粉产品营销计划书
- TCNPA - 景区玻璃栈道建设规范
- 生成式人工智能(AIGC的逻辑与应用)
- 成都东郊记忆发展现状与对策分析
- 小升初作文20个主题万能开头与结尾
- 《公共机构能源托管规程》
评论
0/150
提交评论