RSA加密小演示—报告

合集下载

(完整版)RSA算法实验报告

(完整版)RSA算法实验报告

RSA算法的实现实验原理算法原理RSA公开密钥密码体制。

所谓的公开密钥密码体制就是使用不同的加密密钥与解密密钥,是一种“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制。

RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥,使用其中一个加密,则需要用另一个才能解密。

RSA的算法涉及三个参数,n、e1、e2。

其中,n是两个大质数p、q的积,n的二进制表示时所占用的位数,就是所谓的密钥长度。

e1和e2是一对相关的值,e1可以任意取,但要求e1与(p-1)*(q-1)互质;再选择e2,要求(e2*e1)mod((p-1)*(q-1))=1。

(n,e1),(n,e2)就是密钥对。

其中(n,e1)为公钥,(n,e2)为私钥。

RSA加解密的算法完全相同,设A为明文,B为密文,则:A=B^e2 mod n;B=A^e1 mod n;(公钥加密体制中,一般用公钥加密,私钥解密)e1和e2可以互换使用,即:A=B^e1 mod n;B=A^e2 mod n;密钥生成首先要使用概率算法来验证随机产生的大的整数是否质数,这样的算法比较快而且可以消除掉大多数非质数。

假如有一个数通过了这个测试的话,那么要使用一个精确的测试来保证它的确是一个质数。

密钥分配和其它加密过程一样,对RSA来说分配公钥的过程是非常重要的。

分配公钥的过程必须能够抵挡一个从中取代的攻击。

假设Eve交给Bob一个公钥,并使Bob相信这是Alice的公钥,并且她可以截下Alice和Bob之间的信息传递,那么她可以将她自己的公钥传给Bob,Bob以为这是Alice的公钥。

步骤如下(这里设B为是实现着)(1)B寻找出两个大素数p和q。

(2)B计算出n=p*q和ϕ(n)=)(p-1)*(q-1)。

(3)B选择一个随机数e(0<e<ϕ(n)),满足(e,ϕ(n))=1 (即e与欧拉函数互素ϕ(n))。

(4)B使用欧几里得算法计算e的模余ϕ(n)的乘法逆元素d。

RSA生成公私钥及加密解密过程演示

RSA生成公私钥及加密解密过程演示

本练习主机A、B为一组,C、D为一组,E、F为一组。

首先使用“快照X”恢复Windows系统环境。

一.RSA生成公私钥及加密解密过程演示(1)本机进入“密码工具”|“加密解密”|“RSA加密算法”|“公私钥”页签,在生成公私钥区输入素数p和素数q,这里要求p和q不能相等(因为很容易开平方求出p与q的值)并且p与q的乘积也不能小于127(因为小于127不能包括所有的ASCII码,导致加密失败),你选用的素数p与q分别是:p=11;q=13。

(2)单击“随机选取正整数e”下拉按钮,随机选取e,e= 103 。

(3)单击“生成公私钥”按钮生成公私钥,记录下公钥(e,n)=(103,143),私钥(d,n)=(7,143)。

(4)在公私钥生成演示区中输入素数p=11 和素数q=13,还有正整数e=103。

单击“开始演示”按钮查看结果,填写表7-1-1。

表7-1-1 公私钥生成演示结果(5)在加/解密演示区中输入明文m=45,公钥n=143(m<n),公钥e=103。

单击“加密演示”按钮,查看RSA加密过程,然后记录得到的密文c=111。

(6)在密文c编辑框输入刚刚得到的密文,分别输入私钥n= 143 ,私钥d= 7 ,点击“解密演示”按钮,查看RSA解密过程,然后记录得到的明文m= 45 。

(7)比较解密后的明文与原来的明文是否一致。

根据实验原理中对RSA加密算法的介绍,当素数p=13,素数q=17,正整数e=143时,写出RSA私钥的生成过程: n=p*q=13*17=221, φ(n)=(p-1)*(q-1) =12*16=192 ,e*d=1 mod φ(n),d=47。

(d,n)=(47,221)。

当公钥e=143时,写出对明文m=40的加密过程(加密过程计算量比较大,请使用密码工具的RSA工具进行计算): c=m emod n40143(mod 221)= 密文c: 105 。

利用生成的私钥d,对生成的密文进行解密:m=c dmod n10547(mod 221)= 明文m:40 。

2023年网络安全RSA算法的实现实验报告

2023年网络安全RSA算法的实现实验报告

网络安全基础教程汇报题目:RSA加密算法学号:专业及班级:计网1102班**:***日期:2023.11.26一、RSA算法简介与应用现实状况RSA公开密钥加密算法自20世纪70年代提出以来,已经得到了广泛承认和应用。

发展至今,电子安全领域旳各方面已经形成了较为完备旳国际规范。

RSA作为最重要旳公开密钥算法,在各领域旳应用数不胜数。

RSA在硬件方面,以技术成熟旳IC应用于多种消费类电子产品。

RSA在软件方面旳应用,重要集中在Internet上。

加密连接、数字签名和数字证书旳关键算法广泛使用RSA。

平常应用中,有比较著名旳工具包Open SSL(SSL,Security Socket Layer,是一种安全传播协议,在Internet上进行数据保护和身份确认。

Open SSL是一种开放源代码旳实现了SSL及有关加密技术旳软件包,由加拿大旳Eric Yang等发起编写旳。

Open SSL应用RSA实现签名和密钥互换,已经在多种操作系统得到非常广泛旳应用。

此外,家喻户晓旳IE浏览器,自然也实现了SSL协议,集成了使用RSA技术旳加密功能,结合MD5和SHA1,重要用于数字证书和数字签名,对于习惯于使用网上购物和网上银行旳顾客来说,几乎每天都在使用RSA技术。

RSA更出目前规定高度安全稳定旳企业级商务应用中。

在当今旳企业级商务应用中,不得不提及使用最广泛旳平台j2ee。

实际上,在j2se旳原则库中,就为安全和加密服务提供了两组API:JCA和JCE。

JCA (Java Cryptography Architecture)提供基本旳加密框架,如证书、数字签名、报文摘要和密钥对产生器;JCA由几种实现了基本旳加密技术功能旳类和接口构成,其中最重要旳是java.security包,此软件包包括旳是一组关键旳类和接口,Java 中数字签名旳措施就集中在此软件包中。

JCE(Java Cryptography Extension) 在JCA旳基础上作了扩展,JCE也是由几种软件包构成,其中最重要旳是javax.crypto包,此软件包提供了JCE加密技术操作API。

密码学实验报告(AES,RSA)

密码学实验报告(AES,RSA)

华北电力大学实验报告||实验名称现代密码学课程设计课程名称现代密码学||专业班级:学生姓名:学号:成绩:指导教师:实验日期:[综合实验一] AES-128加密算法实现 一、实验目的及要求(1)用C++实现;(2)具有16字节的加密演示;(3)完成4种工作模式下的文件加密与解密:ECB, CBC, CFB,OFB.二、所用仪器、设备计算机、Visual C++软件。

三. 实验原理3.1、设计综述AES 中的操作均是以字节作为基础的,用到的变量也都是以字节为基础。

State 可以用4×4的矩阵表示。

AES 算法结构对加密和解密的操作,算法由轮密钥开始,并用Nr 表示对一个数据分组加密的轮数(加密轮数与密钥长度的关系如表2所示)。

AES 算法的主循环State 矩阵执行1 r N 轮迭代运算,每轮都包括所有 4个阶段的代换,分别是在规范中被称为 SubBytes(字节替换)、ShiftRows(行位移变换)、MixColumns(列混合变换) 和AddRoundKey ,(由于外部输入的加密密钥K 长度有限,所以在算法中要用一个密钥扩展程序(Keyexpansion)把外部密钥 K 扩展成更长的比特串,以生成各轮的加密和解密密钥。

最后执行只包括 3个阶段 (省略 MixColumns 变换)的最后一轮运算。

表2 AES 参数比特。

3.2、字节代替(SubBytes )AES 定义了一个S 盒,State 中每个字节按照如下方式映射为一个新的字节:把该字节的高4位作为行值,低4位作为列值,然后取出S 盒中对应行和列的元素作为输出。

例如,十六进制数{84}。

对应S 盒的行是8列是4,S 盒中该位置对应的值是{5F}。

S 盒是一个由16x16字节组成的矩阵,包含了8位值所能表达的256种可能的变换。

S 盒按照以下方式构造:(1) 逐行按照升序排列的字节值初始化S 盒。

第一行是{00},{01},{02},…,{OF};第二行是{10},{l1},…,{1F}等。

RSA非对称加密算法实验报告

RSA非对称加密算法实验报告
学与工程学院
2009年9月
第一部分
信息加密技术实验
第一部分 信息加密技术实验
一、实验目的:
在数据加密、解密的算法中,DES算法是典型的单密钥体制,RSA是典型的双密 钥体制, 目前均在大量使用。 通过实验, 让学生充分理解和掌握DES和RSA算法,PGP 加密工具的使用。以及通过网络进行数据加密传输的概念。
RSA实验: 运行《RSATool》演示软件: 产生公钥和私钥
第二项任务 DES加密解密工具2.1及其代码——支持字符串及文件加密,支持3重DES
1.DES 2.1 说明
先看看DES 2.1 的截图:
的简介: 2. DES 2.1 2.1的简介:
1.支持任意长度字符串加密解密 2.明文、密钥可以不足8字节 3.支持回车换行,Tab 等特殊字符 4.密文可以选择三种方式显示 5.支持3重DES 6.支持文件加密、解密 7.加密时显示进度
3.DES 算法介绍
关于DES算法的介绍大家可以看我博客里的另一篇文章,[原创]DES算法的介绍以及实
现(含上次DES程序1.0的 源 码 ) ,所以在此不在重述。
提供的 Public 函数 4. yxyDES2 Class Class提供的 提供的Public Public函数
下面我们来看看yxyDES2 类(Class)里public函数和它们的用法: //功能:产生16个28位的key //参数:源8位的字符串(key),存放key的序号0-1 //结果:函数将调用private CreateSubKey将结果存于char SubKeys[keyN][16][48] void InitializeKey(char* srcBytes,unsigned int keyN); //功能:加密8位字符串 //参数:8位字符串,使用Key的序号0-1 //结果:函数将加密后结果存放于private szCiphertext[16] // 用户通过属性Ciphertext得到 void EncryptData(char* _srcBytes,unsigned int keyN); //功能:解密16位十六进制字符串 //参数:16位十六进制字符串,使用Key的序号0-1 //结果:函数将解密候结果存放于private szPlaintext[8] // 用户通过属性Plaintext得到 void DecryptData(char* _srcBytes,unsigned int keyN); //功能:加密任意长度字符串 //参数:任意长度字符串,长度,使用Key的序号0-1 //结果:函数将加密后结果存放于private szFCiphertextAnyLength[8192] // 用户通过属性CiphertextAnyLength 得到 void EncryptAnyLength(char* _srcBytes,unsigned int _bytesLength,unsigned int keyN); //功能:解密任意长度十六进制字符串 //参数:任意长度字符串,长度,使用Key的序号0-1 //结果:函数将加密后结果存放于private szFPlaintextAnyLength[8192] // 用户通过属性PlaintextAnyLength 得到 void DecryptAnyLength(char* _srcBytes,unsigned int _bytesLength, unsigned int keyN); //功能:Bytes到Bits的转换, //参数:待变换字符串,处理后结果存放缓冲区指针,Bits缓冲区大小 void Bytes2Bits(char *srcBytes, char* dstBits, unsigned int sizeBits); //功能:Bits到Bytes的转换, //参数:待变换字符串,处理后结果存放缓冲区指针,Bits缓冲区大小 void Bits2Bytes(char *dstBytes, char* srcBits, unsigned int sizeBits);

RSA算法实验报告

RSA算法实验报告

RSA算法实验报告1.实验目的2.实验原理-选择两个大素数p和q,并计算其乘积n=p*q作为公钥的模数。

-计算n的欧拉函数值φ(n)=(p-1)*(q-1)。

-选择一个小于φ(n)且和φ(n)互质的数e作为公钥的指数。

- 生成一个满足条件d*e mod φ(n)=1的数d作为私钥的指数。

-公钥为(e,n),私钥为(d,n)。

- 加密过程中,将明文m用公式c=m^e mod n进行加密。

- 解密过程中,将密文c用公式m=c^d mod n进行解密。

3.实验步骤为了实现RSA算法,我们可以按照以下步骤进行操作:-选择两个大素数p和q,并计算乘积n=p*q。

-计算n的欧拉函数值φ(n)=(p-1)*(q-1)。

-选择一个小于φ(n)且和φ(n)互质的数e作为公钥的指数。

- 计算满足条件d*e mod φ(n)=1的数d作为私钥的指数。

- 对于待加密的明文m,计算密文c=m^e mod n。

- 对于待解密的密文c,计算明文m=c^d mod n。

4.实验结果与分析我们选取两个大素数p=17,q=23,并计算得到n=391,φ(n)=352、选择e=3作为公钥的指数,并计算满足条件的私钥指数d=235、现在我们分别测试加密和解密过程。

-加密过程:设明文m=65,根据公式c=m^e mod n,计算得到密文c=65^3 mod 391=279-解密过程:设密文c=279,根据公式m=c^d mod n,计算得到明文m=279^235 mod 391=65加密和解密结果都为65,验证了RSA算法的正确性。

5.实验总结通过本次实验,我们成功实现了RSA算法,并验证了其加密和解密的正确性。

RSA算法的核心是利用两个大素数的乘积作为公钥的模数,并通过选择合适的指数和满足条件的私钥指数来进行加密和解密。

RSA算法具有很强的安全性,因为破解RSA需要对大素数进行因数分解,这是一个非常复杂和耗时的过程。

然而,RSA算法的计算复杂度较高,当加密的数据量较大时,计算速度较慢。

rsa实验报告

rsa实验报告RSA实验报告引言:RSA(Rivest-Shamir-Adleman)是一种非对称加密算法,广泛应用于信息安全领域。

本实验旨在通过实际操作,深入了解RSA算法的原理和应用。

一、RSA算法原理RSA算法基于数论中的大数分解问题,其核心原理是利用两个大质数的乘积很容易计算得到,但是将这个乘积分解为两个大质数却非常困难。

以下是RSA算法的具体步骤:1. 选择两个不相等的大质数p和q,并计算它们的乘积n=p*q。

2. 计算n的欧拉函数φ(n)=(p-1)*(q-1)。

3. 选择一个小于φ(n)且与φ(n)互质的整数e作为公钥指数。

4. 计算e的模反元素d,即满足(e*d)%φ(n)=1的整数d,作为私钥指数。

5. 公钥为(n, e),私钥为(n, d)。

6. 加密时,将明文m通过公式c=(m^e)%n计算得到密文c。

7. 解密时,将密文c通过公式m=(c^d)%n计算得到明文m。

二、实验过程1. 生成密钥对首先,我们使用Python编程语言生成RSA密钥对。

通过调用相关库函数,我们可以轻松地生成公钥和私钥。

2. 加密与解密接下来,我们使用生成的密钥对进行加密与解密操作。

我们选择一段文字作为明文,将其转化为整数形式,并使用公钥进行加密。

然后,使用私钥对密文进行解密,还原为明文。

3. 安全性分析RSA算法的安全性基于大数分解的困难性。

由于大质数的乘积很容易计算得到,而将其分解为两个大质数却非常困难,因此RSA算法在理论上是安全的。

然而,在实际应用中,如果选择的大质数不够大或者密钥管理不当,可能会导致算法的安全性受到威胁。

三、实验结果与分析经过实验,我们成功生成了RSA密钥对,并进行了加密与解密操作。

实验结果表明,RSA算法能够有效地实现信息的加密和解密。

四、应用领域RSA算法在信息安全领域有着广泛的应用。

以下是一些常见的应用场景:1. 数字签名RSA算法可以用于生成数字签名,确保数据的完整性和真实性。

信息安全-RSA加密算法实验报告

2.私钥
求出正数d,使其满足e d=1 mod D (n),则将(p,q,d)作为私钥。
3.加密算法对于明文M,由C=Memod n,得到密文C。
4.解密算法对于密文C,由M=Cdmod n,得到明文M
如果窃密者获得了n, e和密文C,为了破解密文必须计算出私钥d,为此需要先分解n为了提高破解难度,达到更高的安全性,一般商业应用要求n的长度不小于1024位,更重要的场合不小于2048位。
实验原理:
公钥密码算法是指一个加密系统的加密密钥和解密密钥是不同的,或者说不能用其中一个推导出另一个。在公钥密码算法的两个密钥中,一个是用于加密的密钥,它是可以公开的,称为公钥;另一个是用于解密的密钥,是保密的,称为私钥。公钥密码算法解决了对称密码体制中密钥管理的难题,并提供了对信息发送人的身份进行验证的手段,是现代密码学最重要的发明。
{b=b/2;
a=(a*a)%n;}
else{b=b-1;c1=(c1*a)%n;}}
②根据算法可得明文数据:5438 1364 2925 14571 14303 5746 8805 4588 1144 40
三、数字转化为字符
1将所得的数字数据转化为字符数据:
for(i=0;i<sl;i++)
{int j=0;
①根据导入数据的参数密文c:12423 11524 7243 7459 14303 6127 10964 16399927213629调用,以及 进行求解m:
for(i=0;i<sl;i++)
{char m1[100];
c1=1;j=0;
a=c[i];
b=d;
while(b&体制是目前为止最成功的公钥密码算法,虽然它的安全性还未能得到理论证明,但经过20多年的密码分析和攻击,迄今仍然被实践证明是安全的。

rsa加密 实验报告

rsa加密实验报告RSA加密实验报告概述RSA加密算法是一种非对称加密算法,广泛应用于信息安全领域。

本实验旨在通过实际操作,深入理解RSA加密算法的原理、过程和应用。

实验目的1. 理解RSA加密算法的原理和基本概念;2. 掌握RSA加密算法的加密和解密过程;3. 了解RSA加密算法的应用场景和安全性。

实验材料1. 一台计算机;2. 编程语言或工具,如Python。

实验步骤1. 生成密钥对首先,我们需要生成一对RSA密钥,包括公钥和私钥。

公钥用于加密数据,私钥用于解密数据。

在Python中,可以使用`cryptography`库来生成密钥对。

2. 加密数据选择一段需要加密的数据,可以是文本、图片或其他文件。

将数据使用公钥进行加密,得到密文。

在Python中,可以使用`cryptography`库中的RSA加密函数来实现。

3. 解密数据使用私钥对密文进行解密,还原成原始数据。

在Python中,可以使用`cryptography`库中的RSA解密函数来实现。

4. 实验结果分析分析实验结果,包括加密后的密文和解密后的明文。

观察密文的长度和结构,以及解密过程是否成功。

同时,可以比较不同数据加密的结果,探讨RSA加密算法的安全性和可靠性。

实验注意事项1. 密钥的安全性:私钥是解密数据的关键,必须妥善保管,避免泄露给他人。

公钥可以公开使用,但也需要注意保护,以防止被篡改。

2. 数据大小限制:RSA加密算法对数据的大小有一定限制,一般建议将较大的数据先进行分块处理,然后分别加密和解密。

3. 算法优化:RSA加密算法的性能较低,特别是对大素数的计算。

在实际应用中,可以采用一些优化技术,如使用快速模幂算法,提高加密和解密的效率。

实验结论通过本次实验,我们深入了解了RSA加密算法的原理和过程。

RSA加密算法具有较高的安全性,适用于保护敏感数据的加密和解密。

然而,由于其计算复杂度较高,对于大数据的加密和解密可能存在性能问题。

RSA加密小演示

河北工业大学计算机软件技术基础(VC)2015年课程设计报告学院电气工程学院班级电气143班姓名张旭学号 140857 成绩____ 一、题目:RSA加密小演示(26)二、设计思路1、总体设计1)分析程序的功能RSA的算法涉及三个参数,n、e1、e2。

其中,n是两个大质数(素数)p、q的积,n的二进制表示时所占用的位数,就是所谓的密钥长度。

e1和e2是一对相关的值,e1可以任意取,但要求e1与(p-1)*(q-1)互质;再选择e2,要求(e2*e1)mod((p-1)*(q-1))=1。

(n及e1),(n及e2)就是密钥对。

RSA加解密的算法完全相同,设A为明文,B为密文,则:A=B^e1 mod n;B=A^e2 mod n; e1和e2可以互换使用,即: A=B^e2 mod n;B=A^e1 mod n;本题的目的就是验证RSA加密的正确性,运行效果如下图所示。

2)系统总体结构:1.输入两个质数,判断是否为质数(zhishu函数);2.输入另一个互质数;3.求乘法逆元(Eclid函数),生成两组密匙;4.输入被加密数据;5.计算加密后数据(quyu函数),解密后数据(quyu函数),判断正误,输出;2、各功能模块的设计:说明各功能模块的实现方法zhishu函数:对于输入得数n依次对2~(n-1)进行取余,判断是否为质数;quyu函数:根据公式B=A^e1 mod n;(a%c*a%c)%c=(a^2)%c,利用循环,对A^e1,进行取余;eclid函数:(题目已知)根据欧几里得算法,求乘法逆元。

3、设计中的主要困难及解决方案根据公式A=B^e2 mod n;B=A^e1 mod n;运算A,B值时发现,A,B值太大,并不能直接运算,在网上找到一些资料却不知道他们算法的含义,然后,我回顾了模运算的一些公式,发现了(a%c*a%c)%c=a^2%c,在了解这个公示后,将a的幂指数推广到n,能经过一次次运算,避免很大的数出现4、你所设计的程序最终完成的功能1)说明你编制的程序能完成的功能验证RSA加密的正确性,输入明文A,对A加密为B,对密文B进行解密2)准备的测试数据及运行结果验证步骤如下:1、由用户输入两个大于10小于100的质数p、q,要求验证p、q均为质数。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

北京大学计算机软件技术基础(VC)2019年课程设计报告学院:班级:姓名:学号:成绩____
一、题目:
RSA加密小演示
二、设计思路
1、总体设计
1)分析程序的功能
RSA的算法涉及三个参数,n、e1、e2。

其中,n是两个大质数(素数)p、q的积,n的二进制表示时所占用的位数,就是所谓的密钥长度。

e1和e2是一对相关的值,e1可以任意取,但要求e1与(p-1)*(q-1)互质;再选择e2,要求(e2*e1)mod((p-1)*(q-1))=1。

(n及e1),(n及e2)就是密钥对。

RSA加解密的算法完全相同,设A为明文,B为密文,则:A=B^e1 mod n;B=A^e2 mod n; e1和e2可以互换使用,即: A=B^e2 mod n;B=A^e1 mod n;
本题的目的就是验证通过程序运行结果验证RSA加密的正确性。

2)系统总体结构:
程序可以由这几部分完成:
1、由用户输入两个大于10小于100的质数p、q,要求验证p、q均为质数;
2、计算n=p*q和m=(p-1)*(q-1);
3、输入一个e1,要求与m互质;
4、计算e1的乘法逆元e2 即实现(e2*e1)mod((p-1)*(q-1))=1 ;
5、输入明文A,对A加密为B,加密方法:B=A^e1 mod n ;
6、对密文B进行解密,解密方法:A=B^e2 mod n;
7、验证RSA加密的正确性。

对于每一次加密,关注的数据有四个:输入的第一个质数p,输入的第二个质
数q,输入与m互质的e1,输入的加密数据A。

对于数据,验证两数均为质数,
两数互质,求逆元的为了简洁有序均采用函数并用while循环来执行验证不通
过时重新输入的问题。

加密中利用乘模性质并通过for循环进行大数幂模与乘
模运算得到加密后数据。

再用类似方法对加密后数据进行解密。

最后将解密后
的数据与加密前的数据进行比较以验证RSA加密是否成功。

3)主要字母代表含义
2、各功能模块的设计:说明各功能模块的实现方法
1)zhishu模块
该函数返回值为整数类型。

要实现的功能是辅助判断用户输入的两个数是否均为质数,若两数均为质数则继续向下执行,若不是则通过while循环让用户重新输入,直到两数均为质数才继续向下执行。

代码参见zhishu函数。

2)huzhi模块
该函数返回值为整数类型。

要实现的功能是辅助判断用户输入的e1与计算得到的m是否有共因子(互质数),同上一模块类似,若两数互质则继续向下执行,若不是则通过while循环让用户重新输入e1,直到两数互质才继续向下执行。

代码参见huzhi函数。

3)niyuan模块
该函数根据用户输入的与m互质的e1计算满足(e2*e1)mod((p-1)*(q-1))=1的e1的乘法逆元e2。

代码参见niyuan函数。

4)for循环(乘模性质)模块
该部分根据用户输入的加密数据以及已得数据,按照乘模性质通过for 循环实现大数幂模与乘模运算,最终得到加密后数据。

代码参见下面给出的main函数部分。

3、设计中的主要困难及解决方案
设计中对输入的要加密数据进行加密无法用常规方法进行加密,主要是无法用常规方法计算大数幂模与乘模运算。

幂模运算是RSA 算法中比重最大的计算,最直接地决定了RSA 算法的性能,针对快速幂模运算这一课题,西方现代数学家提出了很多的解决方案。

经查阅相关数学著作,发现通常都是依据乘模的性质mod
((
)
(
⨯,
mod
=
)
mod
(⨯
b
))
n
n
n
a mod
b
n
a
( 例如求D=n
C E mod,E=5,可分解为如下5步运算。

C1=1*C mod n
C2=C1*C mod n
C3=C2*C mod n
C4=C3*C mod n
C5=C4*C mod n )
先将幂模运算化简为乘模运算,从而解决大数幂模与乘模运算,得到加密后数据。

4、我所设计的程序最终完成的功能
1)编制的程序能完成的功能
能够由用户输入两个质数p,q,验证输入的两数是否均为质数;计算n=p*q和m=(p-1)*(q-1),由用户输入e1使其与m互质,并验证输入的e1是否与m互质;利用已给函数完成对e1的乘法逆元e2的计算;利用乘模性质完成大数幂模与乘模运算,从而将要加密数据加密,并用类似方法对加密数据解密,验证RSA加密的正确性。

2)准备的测试数据
输入数据: p=15,q=17
验证不通过,重输: p=13,q=17
输入数据: e1=16
验证不通过: e1=19
输入加密数据: A=78
3)运行结果
三、程序清单
1)main函数
2)zhishu函数
3)huzhi函数
4)niyuan函数
四、对该设计题目有何更完善的方案
1、对自己完成的程序进行自我评价
我设计的程序较好的完成了任务中规定的设计内容,并在自己的能力内对程序进行了适当的简化,较好的完成了最终需要达到的目的,对样本数据进行运行检验,最终结果运行正确。

2、对课题提出更完善的方案
1)在输入与(p-1)*(q-1)互质的数时,如果用户输入了不符合要求的数,我采用了让用户重新输入的方法,为了防止用户多次输入错误导致界面不能做到很简洁,可以在用户输入错误到达一定次数时利用if语句实现提醒用户重启程序,重新使用该程序。

2)本课题中要求加密的数据只有一个,可以利用数组从而实现程序对多个数据加密、解密,最后验证是否成功。

五、收获及心得体会
通过该课程设计,我感觉到C++是一种很强大的计算机编程语言,对于一些比较复杂的计算方式可以通过C++编程实现简化并通过计算机完成计算要求。

程序设计中它培养了我综合利用C++语言进行程序设计的能力。

通过我的独立思
考,提高了我独立思考的能力以及将所学知识转化为分析和设计简单实际问题的能力,并且提高了我建立程序文档、归纳总结的能力,从而增强我的创新精神和实践能力。

总结的经验:
在编程中如果遇到一些问题,一定要静下心来,仔细观察思考问题的要求,理清解题的思路;对于一些问题的解决一定要多回忆以前所学的知识,用已学知识认真地解决问题。

适当的做一些函数调用,可以极大地简化主函数复杂程度,并且使整个程序更加简洁,便于帮助操做者理清思路,易于发现不合理部分,进而对程序进行一些修改,简化程序。

同时在遇到一些问题时除了可以向老师进行求解以外,我们还可以随时通过网络寻找一些资料解决自己的问题。

在操作学习过程中可以多与同学进行交流,通过交流寻求解决问题的方法。

日期:2019年6月27日。

相关文档
最新文档