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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

本文(现代密码学实验(题目+代码).doc)为本站会员(scg750829)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

现代密码学实验(题目+代码).doc

1、实 验 报 告实验课程名称 现代密码学 学 院 理学院 年级 大三 专业班 信科 0802 学 生 姓 名 王尔林 学 号 200810010210 开 课 时 间 2010 至 2011 学年第 二 学期 总 成 绩教师签名实验项目名 称 实验一、古典密码(认识密码学)成绩一、实验目的通过实现简单的古典密码算法,理解密码学的相关概念如明文(plaintext) 、密文(ciphertext) 、加密密钥(encryption key)、解密密钥( decryption key) 、加密算法(encryption algorithm)、解密算法(decryption algorithm)等。二

2、、实验内容1)用 CC+语言实现仿射变换(Affine)加/解密算法;2)用 CC+语言实现统计26 个英文字母出现的频率的程序;3)利用仿射变换加/解密程序对一段较长的英文文章进行加密,再利用统计软件对明文和密文中字母出现的频率进行统计并作对比,观察有什么规律。放射变换:加密: 26mod, baEcba解密: 1, cDm其中 a, b 为密钥, ,且 gcd(a, 26)=1250实验要求:加/解密程序对任意满足条件的 a、b 都能够处理。三、实验步骤(1)统计 26 个英文字母出现的频率的程序#include#include#includeusing namespace std;voi

3、d main()ifstream in(“a.txt“);vector s;vector n(26,0);for(int i=0;ix; )for(int i=0;i#include#includeusing namespace std;/判断两个数是不是互素(辗转相除)/bool gcd(int a)int f=26,g,r;g=a;dor=f%g;f=g;g=r;while(r);if(f=1)return 1;elsereturn 0;/求逆 /int inv(int a)int x,i;for(i=1;iz;if(z=0|z=1) /coutab;if(a25)|(b25)cout s

4、;for(char x;inx; )s.push_back(int(x);for(int i=0;i s;for(char x;inx; )s.push_back(int(x);for(int i=0;i#include#include#includeusing namespace std;void main()/下面是密钥的产生/int a31=1,1,0,0,1;for(int k=5;kkey;vector s,ss;if(key=1|key=2)if(key=1) coutc)int sum=0;for(int j=0;j32)i=(i+j-1)%31+1;elsei=i+8;s.pu

5、sh_back(int(c)sum);for(int kk=0;kkc)int sum=0;for(int j=0;j32)i=(i+j-1)%31+1;elsei=i+8;s.push_back(int(c)sum);for(int kk=0;kkusing namespace std;/return next stateunsigned char fn_feedback(unsigned char n,unsigned char c,unsigned char curr_state)unsigned char t = c unsigned char s = t /get first bit

6、for(int i =1; i (n-1); /return next statevoid lfsr_output_byte(int n,unsigned char c,unsigned char init_state,unsigned char output_bytes,int byte_length)unsigned char next_state = init_state;for(int i = 0; i j );next_state = fn_feedback(n, c, next_state);output_bytesi = temp;/output a char type of d

7、ata in binary wayvoid output_binary(unsigned char c)for(int i=0; icypher;for(int j=0;cypherj!=0;j+)cyphj=cypherjbj;cout#include #include using namespace std;int Euclid(int a,int n)/n 大于 aint x,y,r;x=n;y=a;for(int i=0;)if(y=0)return x;if(y=1)return y;r=x%y;x=y;y=r;double extenEuclid(double a,double n

8、)/利用扩展的 EUCLID 计算 a mod n 的乘法逆元double x1=1,x2=0,x3=n,y1=0,y2=1,y3=a,Q;double t1,t2,t3;for(int i=0;)if(y3=0)return x3;cout b;unsigned int N=n-1;for(int i=0,j=1; i+)if(jN)break;if( (N i) elseb.push_back(0);j*=2;/将 n-1 表示成二进制形式for(int k=0;k=0;ii-)x=d;d=(d*d)%n;if(d=1if(bii=1)d=(d*a)%n;if(d!=1)return fa

9、lse;return true;double quickindex1(double a,double m,double n)/实现 am mod n 的运算vector b;unsigned double N=m;for(int ii=0,j=1;ii+)if(jN)break;if(Nii)elseb.push_back(0);j*=2;double c=0,d=1;for(int i=b.size()-1;i=0;i-)c*=2;d=(d*d)-int(d*d)/n)*n;if(bi=1)c+=1;d=(d*a)-int(d*a)/n)*n;return d;void transfer(c

10、har cypher,double c)int m100=0;for(int i=0,j=0;cypherj!=0;i+=2)if(cypherj= )mi=0;mi+1=0;elsemi=cypherj-64;if(mi10)mi+1=mi;mi=0;elsemi+1=mi%10;mi=mi/10;j+;for(int k2=0;k22*strlen(cypher);k2+)coutmk2;coutendl;/int c100=0;for(int k=0,n=0;k2*strlen(cypher);k+=4)cn=mk*1000+mk+1*100+mk+2*10+mk+3;n+;for(;c

11、n-11000;)/最后一个数填充零 ,不过此例可要可不要cn-1*=10;void main()double c100=0;double a100=0;double b100=0;char cypher=“I LOVE THE PEOPLES REPUBLIC OF CHINA“;/对“我爱中华人民共和国”加解密transfer(cypher,c);/字母变数字的过程for(int k1=0;ck1!=0;k1+)coutck1“ “;/选取两个素数 p=563,q=823double n=0, fn=0, p=563,q=823,d=0;n=p*q;fn=(q-1)*(p-1);/选 e 与 fn 互素for(double e=2;efn;e+=3)if(Euclid(e,fn)=1)break;d=extenEuclid(e,fn);coutendl“密码和密钥 e d and n:“;coute“ “d“ “nendl;/加密过程coutendl“加密:“;for(int i=0;ci!=0;i+)ai=quickindex1(ci,e,n);coutai“ “;coutendl“解密:“;/解密过程for(int j=0;aj!=0;j+)bj=quickindex1(aj,d,n);coutbj“ “;coutendl;四、实验结果及分析

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报