logo资料库

现代密码学实验报告(包含DES算法).doc

第1页 / 共37页
第2页 / 共37页
第3页 / 共37页
第4页 / 共37页
第5页 / 共37页
第6页 / 共37页
第7页 / 共37页
第8页 / 共37页
资料共37页,剩余部分请下载后查看
重 庆 大 学 学 生 实 验 报 告 实验课程名称 开课实验室 学院 年级 专业 班级 学生姓名 学号 2009 年 4 月 20 日
实验 1:古典密码(认识密码学) 实验目的:通过实现简单的古典密码算法,理解密码学的相关概念如明文 ( plaintext )、密文( ciphertext ) 、加密密钥(encryption key)、解密密钥( decryption key)、加密算法( encryption algorithm )、解密算法( decryption algorithm ) 等。 实验内容:1、用 C\C++语言实现仿射变换 ( Affine ) 加/解密算法;2、用 C\C++ 语言实现统计 26 个英文字母出现的频率的程序;3、利用仿射变换加/解密程序 对一段较长的英文文章进行加密,再利用统计软件对明文和密文中字母出现的频 率进行统计并作对比,观察有什么规律。 仿射变换: , ba  加密:   0 其中 a, b 为密钥,   am mEc    1  a cDm  , ba , 25 ba  解密: mod  26 mod b   26 bc  ,且 gcd(a, 26)=1 实验要求:加/解密程序对任意满足条件的 a、b 都能够处理。 实验环境:Window xp VC++2008 实验结果及分析: C++实现程序如下: #include #include #include #include using namespace std; int inv(int a){ int i=1; while((a*i-1)%26!=0) i++; return i;
} void encryption(){ int a,b; cout<<"输入加密密钥:\na="; cin>>a; cout<<"b="; cin>>b; ifstream in("a.txt"); char plaintext,ciphertext; for(string str;getline(in,str);){ ofstream out("b.txt",ios::app); for(istringstream sin(str);sin>>plaintext;){ ciphertext=(a*(plaintext-'a'+26)+b)%26+'a'; out<>ciphertext;){ plaintext=(((ciphertext-'a')-b)*c)%26+'a'; out<>p;
ifstream in(p); for(string str;getline(in,str);) for(istringstream sin(str);sin>>b;){ a[26]++; a[b-'a']++; } for(int i=0;i<26;i++){ cout.precision(4); cout<>n; switch(n){ case 1: encryption(); cout<<"加密完成..."<
文件 a.txt 内容: 文件 b.txt 内容: 文件 c.txt 内容:
实验 2:流密码(认识 LFSR 及流密码) 实验目的:通过实现简单的线性反馈移位寄存器(LFSR),理解 LFSR 的工作原 理、本原多项式重要意义。 实验内容:1)利用 C\C++语言实现 LFSR(其中 LFSR 已给定);2)通过不同初 始状态生成相应的序列,并观察他们的周期有什么特点;3)利用生成的序列对 文本进行加/解密(按对应位作模 2 加运算)。 其中的 LFSR 为: 实验环境:Window xp VC++2008 实验结果及分析: C 语言实现程序如下: #include #include #define Max 5 void main(){ int order[5]; int fn_feedback(int a[5]); int i; printf("请输入五个整数,用逗号格开:\n"); for(i=0;i<5;i++)
scanf("%d",&order[i]); //从文件中读出 FILE *in,*out; if((in=fopen("a1.txt","r"))==NULL){ printf("cannot open file\n"); exit(0); } if((out=fopen("a3.txt","w"))==NULL){ printf("cannot open file\n"); exit(0); } char data; int sum,p; data=fgetc(in); while(data!=EOF){ sum=0; for(i=0;i<8;i++){ if((data<
for(i=0;i<4;i++) a[i]=a[i+1]; a[4]=k^a[2]; return k; } 运行程序: 打开文件 a3.txt : 更改程序: if((in=fopen("a3.txt","r"))==NULL){ printf("cannot open file\n"); exit(0); } if((out=fopen("a2.txt","w"))==NULL){ printf("cannot open file\n"); exit(0); } 再次运行相同程序,输入相同数据,得文件 a2.txt:
分享到:
收藏