logo资料库

中国矿业大学密码学实验报告.docx

第1页 / 共86页
第2页 / 共86页
第3页 / 共86页
第4页 / 共86页
第5页 / 共86页
第6页 / 共86页
第7页 / 共86页
第8页 / 共86页
资料共86页,剩余部分请下载后查看
中国矿业大学计算机学院 2015 级本科生课程报告 课程名称 密码学课程设计 报告时间 2018.1.12 学生姓名 罗阳 学 专 号 业 08153280 信息安全 任课教师 汪楚娇 任课教师评语
任课教师评语(①对课程基础理论的掌握;②对课程知识应用能力的评价;③对课程报 告相关实验、作品、软件等成果的评价;④课程学习态度和上课纪律;⑤课程成果和报告工 作量;⑥总体评价和成绩;⑦存在问题等): 成 绩: 任课教师签字: 年 月 日
目录 一.实验一 1.1 仿射密码 1.1.1 实验要求 1.1.2 实验内容 1.1.3 实验原理 1.1.4 详细设计 1.1.5 完整代码 1.1.6 结果截图 1.1.7 实验感悟 1.2 Vigenere 密码 1.2.1 实验要求 1.2.2 实验内容 1.2.3 实验原理 1.2.4 详细设计 1.2.5 完整代码 1.2.6 结果截图 1.2.7 实验感悟 二.实验二 2.1 DES 算法 2.1.1 实验要求 2.1.2 实验内容 2.1.3 实验原理 2.1.4 详细设计 2.1.5 完整代码 2.1.6 结果截图 2.1.7 实验感悟 2.1 AES 算法 2.1.1 实验要求 2.1.2 实验内容 2.1.3 实验原理 2.1.4 详细设计 2.1.5 完整代码 2.1.6 结果截图 2.1.7 实验感悟 三.实验三 3.1 RC4 算法 3.1.1 实验内容 3.1.2 实验原理 3.1.3 详细设计 3.1.4 完整代码 3.1.5 结果截图
3.1.6 实验感悟 3.2 A5 算法 3.2.1 实验内容 3.2.2 实验原理 3.2.3 完整代码 3.2.4 结果截图 3.2.5 实验感悟 四.实验四 4.1 MD5 算法 4.1.1 实验内容 4.1.2 实验原理 4.1.3 详细设计 4.1.4 完整代码 4.1.5 结果截图 4.1.6 实验感悟 4.2 SHA1 算法 4.2.1 实验内容 4.2.2 实验原理 4.2.3 完整代码 4.2.4 结果截图 4.2.5 实验感悟 五.实验五 5.1 大数模幂运算 5.1.1 实验内容 5.1.2 详细设计 5.1.3 完整代码 5.1.4 结果截图 5.1.5 实验感悟 5.2 RSA 公钥密码体制 5.2.1 实验内容 5.2.2 实验原理 5.2.3 完整代码 5.2.4 结果截图 5.2.5 实验感悟
实验一 古典密码 1.1 仿射密码 1.1.1 实验要求 能用高级语言实现古典加密方法 1.1.2 实验内容 实现仿射密码,具体要求: A. 实现仿射密码加密过程,由用户输入密钥,可以对任意输入的明文进 加密; B. 根据用户输入的加密密钥,自动生成解密密钥,并能对加密密文进行解 密; 是: C. 实现仿射密码破解程序(穷举),能对任意输入的密文进行解密 1.1.3 实验原理 加法密码和乘法密码结合就构成仿射密码,仿射密码的加密和解密算法 C= M= Ek(m)=(k1m+k2) Dk(c)=k1(c- n 仿射密码具有可逆性的条件是 gcd(k, k2) mod mod n n)=1。当 k1=1 时,仿射密码变 加法密码,当 k2=0 时,仿射密码变为乘法密码。仿射密码中的密钥空间的大小 为 nφ(n),当 n 为 26 字母,φ(n)=12,因此仿射密码的密钥空间为 12×26 = 312。 仿射密码算法 1.1.4 详细设计 该函数主要用于求逆元,采用扩展欧几里得算法 public static int niyuan(int a,int b) { if(b==0) { x=1; y=0; q=a; } else { int ans=niyuan(b,a%b); int t=x; x=y; y=t-a/b*y; if(x<0) x+=26; } return x; }
仿射加密函数,把加密的单个字符转换成数字再转换成0~26的数字进行运算运算结束再 回转形成字符 public static String jiami(char s[],int a,int b) { int i; int length=s.length; int d[]=new int[length]; for(i=0;i
return String.valueOf(ch); } 穷举法解密主要是列出所有与 26 互素的数求模 26 的逆元,然后列出这 可以求逆元的数据与 0~26 之间的数字组成的密钥进行解密,所有结果其中必有 一个是正解。 public static void qiongju(String s1,char s2[]) { int a=0; int x; String s=String.valueOf(s2); for(int i=0;i<26;i++) { a++; if(gcd(a,26)==1) { x=niyuan(a,m); for(int j=1;j<=26;j++) { String ss=jiemi(s1,x,j); System.out.println(ss); } } } } 1.1.5 完整代码 package 密码学; import java.util.*; public class Main11 { static int x,y,q; static int m=26; public static String jiami(char s[],int a,int b) { int i; int length=s.length; int d[]=new int[length]; for(i=0;i
for(i=0;i
分享到:
收藏