




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、信息安全实验报告 学 号:学生姓名: 班 级: 实验三 密码学实验一、古典密码算法实验一、 实验目的通过编程实现替代密码算法和置换密码算法,加深对古典密码体制的了解,为深入学习密码学奠定基础。二、 编译环境运行 windows 或 linux 操作系统的 PC 机,具有 gcc(linux)、VC(windows)等 C语言编译环境。三、 实验原理古典密码算法历史上曾被广泛应用,大都比较简单,使用手工和机械操作来实现加密和解密。它的主要应用对象是文字信息,利用密码算法实现文字信息的加密和解密。下面介绍两种常见的具有代表性的古典密码算法,以帮助读者对密码算法建立一个初步的印象。 1 替代密码 替
2、代密码算法的原理是使用替代法进行加密,就是将明文中的字符用其它字符替代后形成密文。例如:明文字母 a、b、c、d ,用 D、E、F、G做对应替换后形成密文。 替代密码包括多种类型,如单表替代密码、多明码替代密码、多字母替代密码、多表替代密码等。下面我们介绍一种典型的单表替代密码,恺撒(caesar)密码,又叫循环移位密码。它的加密方法,就是将明文中的每个字母用此字符在字母表中后面第 k个字母替代。它的加密过程可以表示为下面的函数: E(m)=(m+k) mod n 其中:m 为明文字母在字母表中的位置数;n 为字母表中的字母个数;k 为密钥;E(m)为密文字母在字母表中对应的位置数。 例如,对
3、于明文字母 H,其在字母表中的位置数为 8,设 k=4,则按照上式计算出来的密文为 L: E(8) = (m+k) mod n = (8+4) mod 26 = 12 = L 2 置换密码 置换密码算法的原理是不改变明文字符,只将字符在明文中的排列顺序改变,从而实现明文信息的加密。置换密码有时又称为换位密码。 矩阵换位法是实现置换密码的一种常用方法。它将明文中的字母按照给的顺序安排在一个矩阵中,然后用根据密钥提供的顺序重新组合矩阵中字母,从而形成密文。例如,明文为 attack begins at five,密钥为 cipher,将明文按照每行 6 列的形式排在矩阵中,形成如下形式: a t
4、t a c k b e g i n s a t f i v e 根据密钥 cipher中各字母在字母表中出现的先后顺序,给定一个置换: 1 2 3 4 5 6 f = 1 4 5 3 2 6 根据上面的置换,将原有矩阵中的字母按照第 1 列,第 4 列,第 5 列,第 3 列,第 2列,第 6 列的顺序排列,则有下面形式: a a c t t k b i n g e s a I v f t e 从而得到密文:abatgftetcnvaiikse 其解密的过程是根据密钥的字母数作为列数,将密文按照列、行的顺序写出,再根据由密钥给出的矩阵置换产生新的矩阵,从而恢复明文。四、 实验内容和步骤1、根据
5、实验原理部分对替代密码算法的介绍,自己创建明文信息,并选择一个密钥 k,编写替代密码算法的实现程序,实现加密和解密操作。 2、根据实验原理部分对置换密码算法的介绍,自己创建明文信息,并选择一个密钥,编写置换密码算法的实现程序,实现加密和解密操作。五、 总结与思考记录程序调试过程中出现的问题,分析其原因并找出解决方法。记录最终实现的程序执行结果。思考采取什么样的手段来防范类似对网络的攻击。六、 实验结果 替换密码的加密解密先是加密实现程序为:#include stdio.h #include conio.h main() int k,i=0; char a100,b100=0; printf(p
6、lease input your ming wen:n); gets(a); printf(please input mi shi n); scanf(%d,&k); printf(n); do bi=(char)(ai+k); if(bi122) bi=(char)(bi-26); i+; while(ai!=0); puts(b); getch(); 实验结果为:再是解密:实现程序为:#include stdio.h#include conio.hmain()int k,i=0;char a100,b100;printf(please input mi wen: n);gets(a);pr
7、intf(please input mi shi: n);scanf(%d,&k);printf(n);dobi=(char)(ai-k);if(bi97)bi=(char)(bi+26);不知道三哪里的问题结果中的Y输不出来i+;while(ai!=0);puts(b);getch();结果为: 置换密码先是加密实现程序#include#define TRUE 1#define FALSE 0#define N 1000#define M 50int Glength(char *a) char *pt; int nlen=0; pt=a; while(*pt)!=0) nlen+; pt+;
8、 return nlen;void encrypt(char *a,int n,int *b) int i,j,k,t,x,y; char cMM,dMM; k=Glength(a); puts(a); t=k%n; if(t=0) x=k/n; else x=(k/n)+1; printf(%dn,x); for(i=0;ix;i+) for(j=0;j96)&(ai*n+j123) cij=ai*n+j; printf(%c,cij); else cij= ; printf(%c,cij); printf(n hehen); for(j=0;jn;j+) for(i=0;ix;i+) y=
9、bj; printf(encrypt %dt,y); diy=cij; printf(-%ct,diy); printf(n); for(i=0;ix;i+) for(j=0;j=1&change;-i) change=FALSE; for(j=0;jaj+1) nTemp=aj; aj=aj+1; aj+1=nTemp; change=TRUE; i=0; while(ci)!=0) for(k=0;kn;k+) if(ci)=ak) bx=k; printf(%dt,bx); i+; x+; printf(n); puts(a);int main() int k; char nArrN,a
10、N; int bN; clrscr(); printf(Please input key:n); gets(nArr); k=Glength(nArr); printf(Please input M word:n); gets(a); printf(The data items in ascending order:n); bubble_sort(&nArr,k,&b); puts(nArr); encrypt(&a,k,&b); puts(a); printf(n); return 0;加密结果为:二、公钥加密算法RSA一、实验目的通过使用 RSA 算法对实验数据进行加密和解密,掌握公钥加密
11、算法的基本原理,熟练掌握 RSA 算法各功能模块的工作原理和具体运算过程。二、实验原理RSA 公钥加密算法是 1977 年由 Ron Rivest、Adi Shamirh 和 LenAdleman 在(美国麻省理工学院)开发的。RSA 取名来自开发他们三者的名字。RSA 是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的所有密码攻击,已被 ISO 推荐为公钥数据加密标准。RSA 算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。1. RSA 的密钥生成RSA 的算法涉及三个参数,n、e、d。其中,n 是两
12、个大质数 p、q 的积,n 的二进制表示时所占用的位数,就是所谓的密钥长度。鉴于现代对于大整数分解的水平不断增强,一般 P、Q 的取值都要求在 1024位以上。e 和 d 是一对相关的值,e 可以任意取,但要求 e 与(p-1)*(q-1)互质;再选择 d,要求:(e*d)mod(p-1)*(q-1)=1。、就是密钥对。一般将前者当作公钥,后者作为私钥使用。2. RSA 加密/解密过程RSA 加解密和解密的算法完全相同,设 A 为明文,B 为密文,则:A=Be mod n;B=Ad mod n;e 和 d 可以互换使用,即:A=Bd mod n;B=Ae mod n;三、实验环境运行 Wind
13、ows 或 Linux 操作系统的 PC 机,具有 gcc(Linux)、VC(Windows)等 C 语言编译环境。四、实验内容和步骤1. 根据本讲义提供的 RSA 程序,分析 RSA 算法的实现过程:(1)、利用:void GenerateKey(RSA_Key& PublicKey,RSA_Key& PrivateKey,unsigned intiKeySize)函数根据实际需要生成符合要求长度的公钥和私钥,大致步骤如下:a) 随机生成两个指定长度的大素数 P,Q。b) 计算 N=P*Q,以及 N 的欧拉函数 (N)=(P-1)*(Q-1)。c) 随机生成一个与 (N)互素的大整数 E(
14、公钥)。d) 根据公式 ed1(mod(N),利用函数 multi_inverse(1, Big*, Big, Big*)计算出私钥 D。(2)、将某个大整数赋值给一个 Big 型变量 M(明文)。(3)、调用函数 powmod(.,.,.,.)对明文 M 加密得到密文 C。(4)、调用函数 powmod(.,.,.,.)对密文 C 解密得到明文 D。(5)、比较 M 与 D 是否一致,判断实验结果是否正确。(6)、调换公钥、私钥后重复以上步骤,验证 e、d 的可互换性,并思考为什么可以这样做。2. 使用实例分析取 p=11,q=13。首先计算:n=pq=1113=143(n)=(p-1)(q
15、-1)=(11-1) (13-1)=120然后选择 e=17,满足 gcd(e,(n)=gcd(17,120)=1,然后根据 ed1(mod(N)计算 d=113。则:公钥:、私钥:。设明文信息:m=24。对明文信息加密,得密文为:cme % N=2417%143=7密文 c 经过公开信道发送到接收方后,接收方用私钥 d 对密文进行解密:mcd % N=7113%143=24从而正确地恢复出明文。五、思考题1、阐明 RSA 密钥生成以及加密、解密流程(1)RSA密钥生成:1)找出p,q,r三个数,p,q互质,r与(p-1)(q-1)互质,p,q,r这三个数便是private key。 2)找出
16、m,使得mr=1 mod (p-1)(q-1) 3)计算n=pq,m,n这两个数便是public key(2)流程:用户A用B的公钥对key进行加密,B收到消息后用自己的私钥进行解密获取key。2. 使用提供的模块编写 RSA 加密程序对数据进行加密和解密,提交程序代码和执行结果。程序代码:#include time.h#include big.h#include #define BUFFERSIZE 4096static miracl* mip = mirsys ( BUFFERSIZE, 0 );struct RSA_Key/密钥结构体Big e;Big N;int main(void)v
17、oid GenerateKey(RSA_Key& PublicKey,RSA_Key& PrivateKey,unsigned int iKeySize);/密钥生成函数RSA_Key PublicKey;/公钥 RSA_Key PrivateKey;/私钥 Big M;/明文MBig C;/密文CBig D;/解密文Dunsigned int iKeySize;std:cout请输入加密密钥长度(单位比特)iKeySize;std:cout密钥生成中.std:endl;GenerateKey(PublicKey,PrivateKey,iKeySize/4);/产生iKeySize bit密钥
18、std:cout密钥生成完毕std:endl;std:cout请输入明文:std:hexM;powmod(M.getbig(), PublicKey.e.getbig(), PublicKey.N.getbig(), C.getbig();/调用加密函数计算:C=(Me)%N std:coutRSA加密密文:std:endl;std:coutstd:hexCstd:endl;powmod(C.getbig(), PrivateKey.e.getbig(), PrivateKey.N.getbig(), D.getbig();/解密与加密使用同一函数,只是密钥不同即:D=(Cd)%Nstd:cout解密:std:endl;std:coutstd:hexDIOBASE = 16;set_io_buffer_size( BUFFERSIZE);Big E,D,P,Q,N,Z;GeneratePrime(&P, iKeySize /4, 16);/生成强素数P
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 江苏财经职业技术学院《疫苗与健康》2023-2024学年第二学期期末试卷
- 郑州工业安全职业学院《变频器原理及应用》2023-2024学年第二学期期末试卷
- 上海农林职业技术学院《现代纤维艺术设计》2023-2024学年第一学期期末试卷
- 兰州理工大学《函数式程序设计》2023-2024学年第二学期期末试卷
- 昭通职业学院《交通统计学》2023-2024学年第一学期期末试卷
- 江西枫林涉外经贸职业学院《本科毕业论文写作范式与技巧》2023-2024学年第二学期期末试卷
- 锦州医科大学《体育散打》2023-2024学年第二学期期末试卷
- 辽宁理工职业大学《农村公共管理学》2023-2024学年第二学期期末试卷
- 手现房买卖定金合同
- 临时劳务合同
- 第7课《提高警惕防拐骗》课件
- 《基础写作教程》 课件全套 第1-11章 基础写作概论- 理论文体
- 刑事案件侦查程序中的监督与纠正措施
- 护士如何处理患者的不合理诉求和抱怨
- 石油化工项目可行性研究报告编制规定
- 液压式随钻震击器设计
- 建筑消防设施检查报告模板
- 广东省义务教育学生毕(结、肄)业鉴定表
- 起诉保险公司的诉讼书范本
- 老年医学概论智慧树知到课后章节答案2023年下浙江大学
- 人教部编版六年级下册语文【选择题】专项复习训练真题100题(附答案解析)
评论
0/150
提交评论