RSA实验报告
实验三、不对称加密算法RSA (1)
实验三、实验报告
姓名:学号:实验日期:
一、实验名称: 不对称加密算法RSA
二、实验目的
1、掌握RSA算法的工作原理。
2、熟悉利用素性检测找素数的工作原理。
三、实验基本方法
1、用C或C++语言编写找素数的算法,并编写RSA参数的计算程序,并将结果显示显示在屏幕上。
2、用C或C++语言编写一个RSA算法;
3、编程实现对32位二进数(4个字符)的加、解密;
4、手工验证加、解密的结果。
说明:
1、RSA算法可以自编,也可以网上下载现成算法。
四、实验步骤
1、编程实现找素数的算法。
2、编程实现找RSA参数的计算程序。
3、编写一个RSA算法;
4、对4个字符加、解密,改变最低1位明文观察并记录RSA的输出。
5、对4个字符加、解密,改变最高1位明文观察并记录RSA的输出。
五、实验结果
1、程序设计的思想,及程序关键原代码。
2、说明素性检测的原理。
3、说明RSA参数的e、d计算的原理。
4、报告对4个字符加、解密,改变最高低和最低1位明文RSA的输出结果。
5、分析上述输出的原因,手工验证输出的正确性。
安全
return OK;
}
/******************************************************************************/
//名称:GetPairKey
//功能:对外提供接口,获得公、私钥对
//参数:uiP:素数P; uiQ:素数Q; uiD:私钥d
//返回:错误代码
/******************************************************************************/
unsigned int MakePairkey( unsigned int uiP, unsigned int uiQ, unsigned int uiD )
{
unsigned int i=0;
//!得到所有与z互质的数(私钥d的集合)
unsigned int z = ( uiP -1 ) * ( uiQ -1 );
pset.size = 0;
for( i=0; i<z; i++ )
{
if( isPrime( i, z ) )
{
pset.set[ pset.size++ ] = i;
mFlag = false;
if( n % i == 0 )
nFlag = false;
if( !mFlag && !nFlag )
Flag = false;
}
if( Flag )
return true;
else
return false;
}
/******************************************************************************/
实验3 非对称密码算法RSA
实验3 非对称密码算法RSA一、实验目的通过实际编程了解非对称密码算法RSA的加密和解密过程,加深对非对称密码算法的认识。
二、实验原理对称密码算法要求通信双方通过交换密钥实现使用同一个密钥,这在密钥的管理、发布和安全性方面存在很多问题,而非对称密码算法解决了这个问题。
加密密钥和解密密钥是不同的,其中加密密钥是可以公开的,解密密钥是要求保密的,并且不能用其中的一个推导出另一个。
它的安全性是建立在“大数分解和素性检测”这个数论难题的基础上,即将两个大素数相乘在计算上容易实现,而将该乘积分解为两个大素数因子的计算量相当大。
虽然它的安全性还未能得到理论证明,但经过30年的密码分析和攻击,迄今仍然被实践证明是安全的。
三、实验环境运行Windows或者Linux操作系统的PC机,具有gcc(Linux)、VC(Windows)等C语言编译环境。
四、实验内容和步骤1、为了加深对RSA算法的了解,根据已知参数:2qp,手工=M=11,3=,计算公私钥,并对明文进行加密,然后对密文进行解密。
2、编写RSA程序,实现对数字和字符进行加密,了解RSA算法原理。
其中p、q不要求为大素数,实现基本功能流程即可。
参考:/*扩展欧几里德算法例如,求5关于模14的乘法逆元:14=5*2+45=4+1说明5与14互素,存在5关于14的乘法逆元。
1=5-4=5-(14-5*2)=5*3-14因此,5关于模14的乘法逆元为3。
Extended Euclid (d,f) //算法求d关于模f的乘法逆元d-1 ,即d* d-1 modf = 11 。
(X1,X2,X3) := (1,0,f);(Y1,Y2,Y3) := (0,1,d)2。
if (Y3=0) then return d-1 = null //无逆元3。
if (Y3=1) then return d-1 = Y2 //Y2为逆元4。
Q := X3 div Y3 //整除5。
(完整版)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。
现代密码算法实验报告(3篇)
第1篇一、实验目的1. 了解现代密码学的基本原理和数论基础知识;2. 掌握非对称密码体制的著名代表RSA加密算法的工作原理和流程;3. 设计实现一个简单的密钥系统;4. 掌握常用加密算法AES和DES的原理及实现。
二、实验内容1. RSA加密算法实验2. AES加密算法实验3. DES加密算法实验三、实验原理1. RSA加密算法RSA算法是一种非对称加密算法,由罗纳德·李维斯特、阿迪·沙米尔和伦纳德·阿德曼三位密码学家于1977年提出。
其基本原理是选择两个大质数p和q,计算它们的乘积n=pq,并计算欧拉函数φ(n)=(p-1)(q-1)。
选择一个整数e,满足1<e<φ(n)且e与φ(n)互质。
计算e关于φ(n)的模逆元d。
公开密钥为(e,n),私有密钥为(d,n)。
加密过程为C=Me mod n,解密过程为M=Cd mod n。
2. AES加密算法AES(Advanced Encryption Standard)是一种分组加密算法,采用128位分组大小和128、192或256位密钥长度。
AES算法主要分为四个阶段:初始轮、密钥扩展、中间轮和最终轮。
每个轮包括字节替换、行移位、列混淆和轮密钥加。
3. DES加密算法DES(Data Encryption Standard)是一种分组加密算法,采用64位分组大小和56位密钥长度。
DES算法主要分为16轮,每轮包括置换、置换-置换、S盒替换和密钥加。
四、实验步骤及内容1. RSA加密算法实验(1)选择两个大质数p和q,计算n=pq和φ(n)=(p-1)(q-1);(2)选择一个整数e,满足1<e<φ(n)且e与φ(n)互质,计算e关于φ(n)的模逆元d;(3)生成公开密钥(e,n)和私有密钥(d,n);(4)用公钥对明文进行加密,用私钥对密文进行解密。
2. AES加密算法实验(1)选择一个128、192或256位密钥;(2)初始化初始轮密钥;(3)进行16轮加密操作,包括字节替换、行移位、列混淆和轮密钥加;(4)输出加密后的密文。
rsa算法实验报告
rsa算法实验报告RSA算法实验报告摘要:RSA算法是一种非对称加密算法,被广泛应用于网络安全领域。
本实验通过对RSA算法的原理和实现进行了深入研究,并通过编写代码实现了RSA算法的加密和解密过程。
实验结果表明,RSA算法具有较高的安全性和可靠性,能够有效保护数据的机密性和完整性。
一、引言RSA算法是一种基于大数因子分解的非对称加密算法,由Rivest、Shamir和Adleman三位数学家于1977年提出。
它的安全性基于两个大素数的乘积难以分解,因此被广泛应用于数字签名、数据加密等领域。
本实验旨在通过对RSA 算法的原理和实现进行研究,深入了解其加密和解密过程,并通过编写代码实现RSA算法的加密和解密过程。
二、RSA算法原理RSA算法的原理主要包括密钥生成、加密和解密三个过程。
首先,选择两个大素数p和q,并计算它们的乘积n=p*q,然后计算欧拉函数φ(n)=(p-1)*(q-1)。
接下来选择一个整数e,使得1<e<φ(n),且e与φ(n)互质,即e和φ(n)的最大公约数为1。
然后计算e的乘法逆元d,使得(e*d) mod φ(n) = 1。
最后,公钥为(n, e),私钥为(n, d)。
加密过程中,将明文m通过公钥加密为密文c,即c=m^e mod n;解密过程中,将密文c通过私钥解密为明文m,即m=c^d mod n。
三、实验设计本实验使用Python语言编写了RSA算法的加密和解密代码,通过输入明文和密钥,实现了对明文的加密和解密过程。
具体实验步骤如下:1. 选择两个大素数p和q,并计算n=p*q,以及φ(n)=(p-1)*(q-1);2. 选择一个整数e,使得1<e<φ(n),且e与φ(n)互质;3. 计算e的乘法逆元d,使得(e*d) mod φ(n) = 1;4. 将明文m通过公钥加密为密文c,即c=m^e mod n;5. 将密文c通过私钥解密为明文m,即m=c^d mod n。
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加密算法测试的用例及测试结果
RSA加密算法测试用例及测试结果1. 介绍RSA(Rivest-Shamir-Adleman)是一种非对称加密算法,被广泛应用于信息安全领域。
它的安全性基于大数分解的困难性,即将一个大数因数分解为两个质数的乘积。
在本文中,我们将编写用例来测试RSA加密算法,并给出测试结果。
2. 测试目标我们的测试目标是验证RSA加密算法在不同场景下的正确性和性能。
具体来说,我们将测试以下几个方面: - 密钥生成:验证生成的公钥和私钥是否正确且符合预期。
- 加密解密:验证加密后能否成功解密,且解密结果与原始明文一致。
- 签名验签:验证使用私钥签名后能否使用公钥成功验签,且验签结果正确。
- 性能:测试RSA算法在不同输入规模下的执行时间。
3. 测试用例设计3.1 密钥生成3.1.1 生成长度为1024位的RSA密钥对输入:密钥长度为1024位输出:公钥和私钥3.1.2 生成长度为2048位的RSA密钥对输入:密钥长度为2048位输出:公钥和私钥3.2 加密解密3.2.1 使用1024位RSA公钥加密输入:明文、1024位RSA公钥输出:密文3.2.2 使用1024位RSA私钥解密输入:密文、1024位RSA私钥输出:明文3.2.3 使用2048位RSA公钥加密输入:明文、2048位RSA公钥输出:密文3.2.4 使用2048位RSA私钥解密输入:密文、2048位RSA私钥输出:明文3.3 签名验签3.3.1 使用1024位RSA私钥对数据签名输入:数据、1024位RSA私钥输出:签名3.3.2 使用1024位RSA公钥对签名进行验签输入:数据、签名、1024位RSA公钥输出:验签结果(True/False)3.3.3 使用2048位RSA私钥对数据签名**输入:* 数据、2048位RSA私钥输出:签名3.3.4 使用2048位RSA公钥对签名进行验签输入: 数据、签名、2048位RSA公钥输出: 验签结果(True/False)3.4 性能测试3.4.1 加密解密性能测试输入:不同长度的明文、RSA密钥对输出:加密解密时间3.4.2 签名验签性能测试输入:不同长度的数据、RSA密钥对输出:签名验签时间4. 测试结果4.1 密钥生成测试用例输入输出结果测试用例输入输出结果生成长度为1024位的RSA密钥对密钥长度为1024位公钥和私钥通过生成长度为2048位的RSA密钥对密钥长度为2048位公钥和私钥通过4.2 加密解密测试用例输入输出结果使用1024位RSA公钥加密明文、1024位RSA公钥密文通过使用1024位RSA私钥解密密文、1024位RSA私钥明文通过使用2048位RSA公钥加密明文、2048位RSA公钥密文通过使用2048位RSA私钥解密密文、2048位RSA私钥明文通过4.3 签名验签测试用例输入输出结果使用1024位RSA私钥对数据签名数据、1024位RSA私钥签名通过使用1024位RSA公钥对签名进行验签数据、签名、1024位RSA公钥验签结果(True/False)通过使用2048位RSA私钥对数据签名数据、2048位RSA私钥签名通过使用2048位RSA公钥对签名进行验签数据、签名、2048位RSA公钥验签结果(True/False)通过4.4 性能测试4.4.1 加密解密性能测试在不同长度的明文和密钥对下,记录加密和解密的时间,并绘制折线图。
实验3_RSA加解密算法
实验3:RSA加密、解密算法实验一、实验目的掌握数论的重要概念和算法(模逆算法、大整数幂的模运算)。
掌握RSA算法。
二、RSA算法原理:1.生成密钥参数①任取两个比较大的素数p,q②计算整数n,n=p*q③计算欧拉函数φ(n)=(p-1)*(q-1)④计算一个较小的正整数w,w应该满足条件gcd(w,φ(n))=1⑤计算一个正整数 d,d应该满足条件w d≡1 (mod φ(n))注:参数(w,n)用于加密,参数(d,n)用于解密2. 加密算法假设需要加密的明文是整数m,加密后的密文是c3.解密算法三、实验任务【实验任务一】(必做)小素数RSA算法①.从键盘输入两个素数p,q,并输出参数n,φ(n),w,d②.从键盘输入明文数据m,计算出密文数据c,输出c③.根据计算机出的密文数据c,计算出明文数据m,输出m④从键盘输入明文字符串mStr,例如"I love you",或者"我爱你"都可以,计算出密文数据cStr,输出cStr⑤解密计算,根据密文数据cStr,计算出明文数据mStr【实验任务二】(可选)大素数RSA算法①给定一个比较整数下限xmin(比如要求xmin>100000),xmin可以大于现有的整数表示范围,因此要求用大整数表示。
②自动计算选取两个大于xmin的大素数p,q,并输出p,q③从键盘输入明文字符串mStr,例如"I love you",或者"我爱你"都可以,计算出密文数据cStr,输出cStr④解密计算,根据密文数据cStr,计算出明文数据mStr。
rsa加密算法测试的用例及测试结果
rsa加密算法测试的用例及测试结果RSA加密算法是一种非对称加密算法,通常用于加密和解密大量数据。
在进行RSA算法的测试时,需要针对不同情况设计用例,测试算法的加密性能、解密正确性、加解密效率等关键性能指标,以确保算法的可靠性和安全性。
下面是一些常见的RSA加密算法测试用例及测试结果:1.生成密钥对测试用例:a.输入一个素数p和另一个素数q,测试生成密钥对的过程。
b.输入一个非素数p或q,测试生成密钥对的过程。
测试结果:对于素数p和q,生成密钥对的过程应该成功,并得到有效的公钥和私钥。
对于非素数p或q,生成密钥对的过程应该失败。
2.加密和解密测试用例:a.输入一个明文数据,用公钥进行加密,然后用私钥进行解密。
b.输入一个密文数据,用私钥进行解密。
测试结果:使用公钥进行加密和私钥进行解密的过程应该成功,并得到相同的明文数据。
用私钥进行解密时,应该得到正确的密文数据。
3.非法密钥测试用例:a.输入一个无效的密钥,测试加密和解密的过程。
b.输入一个被篡改的密钥,测试加密和解密的过程。
测试结果:对于无效的密钥,加密和解密的过程应该失败。
对于被篡改的密钥,加密和解密的过程应该失败或者得到错误的结果。
4.高负载测试用例:a.输入一个大容量的数据,测试加密和解密的性能和效率。
b.输入一个大容量的数据,测试生成密钥对的性能和效率。
测试结果:加密和解密大容量数据的过程应该在合理的时间范围内完成,不应该出现明显的性能瓶颈。
生成密钥对的过程也应该在合理的时间范围内完成。
5.并发性能测试用例:a.同时进行多个加密操作,测试加密的并发性能和效果。
b.同时进行多个解密操作,测试解密的并发性能和效果。
测试结果:当进行多个加密或解密操作时,应该能够正常处理请求,并保持合理的性能水平,不会出现明显的延迟或错误。
通过以上测试用例的设计和执行,可以全面地验证RSA加密算法的正确性、性能以及可靠性。
根据测试结果可以进一步优化算法实现,提高加解密的效率和安全性。
2非对称加密实验
(6)解密
清除明文文本框中的内容,点击“解密”按钮对密文进行解密,明文默认以十六进制形式显示在明文文本框中,如图1.1.720所示;可选择以文本形式查看明文。
(二)扩展实验
(1)在扩展实验中点击“ELGAMAL扩展实验”按钮,进入ELGAMAL扩展实验窗体。
(1)点击“扩展实验”框中的“RSA计算”按钮,进入RSA计算窗体。
输入报文信息,点击“计算MD5值”生成报文信息的信息摘要,选择p、q值,计算n、φ(n)、e和d并输入相应的文本框中,点击“检验”按钮对计算的各个参数值进行检验。
检验无误后,根据上述计算得到的RSA私钥,计算报文MD5值即报文摘要的前8位的签名值,并输入相应的文本框;点击“生成签名并检验”按钮,检验签名输入是否正确并自动生成消息摘要前8位的签名值并显示,
标准方法可选择公钥加密/私钥解密形式和公钥加密/私钥解密形式进行加解密,此处以公钥加密/私钥解密形式进行加解密,公钥加密/私钥解密可参照完成;注意在一次加解密过程中不要重新生成密钥对。
点击“公钥加密”按钮使用生成的公钥对明文进行加密,密文以十六进制显示在密文文本框中;清除明文文本框中的内容,点击“私钥解密”按钮对密文进行解密,明文默认以文本形式显示在明文文本框中,如图1.1.72所示;可选择以16进制查看明文。
具体步骤可参照古典密码实验中实验步骤二。
三、ECC
(一)扩展实验
(1)在扩展实验中点击“ECC扩展实验”按钮,进入ECC扩展实验窗体。
(2)确定合适的椭圆曲线,获取该曲线的基础解点集。首先,在主窗口的椭圆曲线组合框内的相应文本框中,输入素数p,以及椭圆曲线的2个系数a和b;然后,点击“测试曲线”,得到该椭圆曲线的基础解点集。
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)
密码学实验——RSA公钥密码体制实验姓名:班级:学号:教师:助教:1.R SA算法参数实验(注:表格内容以截图形式给出,共测4组数据!)2.各功能函数介绍与描述(1)ext_euclid函数介绍:A.编程思想介绍:首先,我们在已知a,b的情况下需要求得最大公约数即gcd(a,b),因此,在编写这个函数之前首先完成功能函数int gcd(int a,int b)的实现,用于求找最大公约数;其次,利用扩展欧几里得算法由a,b,gcd(a,b)反解出x,y使得a*x+b*y=gcd(a,b);B.编程过程:事实上,求找x,y与gcd(a,b)没有必要联系,涵盖gcd(a,b)函数是为了返回的内容更全面,介绍如下:先简单介绍gcd函数实现——publicstaticint gcd(int a,int b){int x=a,y=b; //采用辗转相除法int r=1; //这里赋1没有太大意义(语法问题)while(r!=0){ //显然,这是辗转相除结束的标志判断r=x%y; //相除并取余数x=y; //下一轮中,被除数是上一轮的除数y=r;} //下一轮中,除数是上一次的余数return x; //辗转相除结束后获得最大公约数}接着是重点——ext_euclid函数的实现publicstaticint[] ext_euclid(int a,int b){/*入口参数即a,b,返回一个数组(含三个元素):第一个是最大公约数,第二个是x,第三个是y*//*这里的算法思想可以参见中文教材P81扩展Euclid算法的表格*/int a0=a,b0=b; //参数传递int xx=1,yy=0,r; //xx,yy为第一次逆运算赋初值r=xx*a0+yy*b0; //由扩展算法d=r n=ax n+by n决定int x0=0,y0=1,q,v;int k;while(r!=0){/*这里r=0和原始Euclid算法中条件判断相对应*/k=x0*a0+y0*b0;q=(xx*a0+yy*b0)/k; //取商舍余,int类型有此功能v=x0;/*注:这里是保护x0值,因为接下来变量要赋新值*/x0=xx-q*x0; //这里就是求最大公约数算法的逆过程xx=v;v=y0;/*注:这里是保护y0值,因为接下来变量要赋新值*/y0=yy-q*y0;yy=v;r=x0*a0+y0*b0;}int[] result=newint[3];result[0]=gcd(a,b);result[1]=xx;result[2]=yy;return result; //返回我们所期望的数组}(2)modular_exponentitation函数介绍:A.编程思想介绍:一开始,我认为指数模运算并不需要太多算法设计,但是如果是“老实地”使用循环语句“累乘”最后再来模运算,很显然,超过int的最大范围的情况是极易出现的。
RSA算法实验报告
RSA算法实验报告第一点:RSA算法原理及其数学基础RSA算法是一种非对称加密算法,于1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)提出。
它的名称就是这三位发明者姓氏的首字母缩写。
RSA算法的出现,为信息安全领域带来了重大的变革,它不仅解决了密钥的分发问题,还提供了加密和解密功能。
RSA算法的核心是基于整数分解的难解性。
假设我们有一个大整数N,它是由两个大质数p和q相乘得到的,即N=pq。
我们知道,分解N为p和q是非常困难的,尤其是在N非常大的情况下。
这就是RSA算法的安全性所在。
RSA算法的步骤如下:1.选择两个大的质数p和q,计算N=pq,再计算欧拉函数φ(N)=(p-1)(q-1)。
2.选择一个与φ(N)互质的整数e,计算d,使得ed≡1(mod φ(N))。
3.将(N,e)作为公钥,(N,d)作为私钥。
4.加密:明文M转换为0到N-1之间的整数m,密文c≡m^e(mod N)。
5.解密:密文c转换为0到N-1之间的整数c,明文m≡c^d(mod N)。
第二点:RSA算法的实现与分析在实际应用中,RSA算法的实现主要包括以下几个步骤:1.随机选择两个大的质数p和q。
为了确保N的安全性,通常需要选择几千位的质数。
2.计算N=pq和φ(N)=(p-1)(q-1)。
3.选择一个与φ(N)互质的整数e,通常选择65537,因为它是一个质数,并且在模运算中具有较好的性能。
4.计算d,使得ed≡1(mod φ(N))。
5.输出公钥(N,e)和私钥(N,d)。
RSA算法的分析主要关注以下几个方面:1.安全性:RSA算法的安全性主要取决于N的质数因子p和q的大小。
当N的位数足够多时,分解N为p和q是非常困难的。
2.性能:RSA算法的加密和解密速度较慢,尤其是当N的位数较多时。
因此,RSA算法更适合用于加密较小的数据,如密钥交换和数字签名。
RSA加密算法实验报告_2
现代密码学实验报告题目: RSA算法的实现过程
一、实验目的
二、简单实现RSA过程, 通过OpenSSL命令编辑器实现发送方对明文进行加
密, 签名, 接受方验证, 解密的简单过程。
三、实验原理
RSA加密算法的基本流程:
四、实验步骤
发送方对明文进行加密:
首先利用MD5对明文进行摘要操作:
然后生成秘钥文件:
再利用这个密钥对摘要进行加密:
然后对摘要进行签名操作:
发送方加密后要发送的东西是: 明文和摘要的签名传送到接收方后,接收方进行解密操作:
接收方进行验证:
通过比较可以发现所得摘要的结果是相同的, 则可以得到结论: 该明文没有被篡改。
五、实验心得
通过对RSA过程的简单模仿, 我们可以明白理论和现实是有一定差别的, 我们需要将明文利用MD5进行摘要处理, 然后在通过MD5对摘要进行验证, 从而判断密文是否经过修改, 达到数据的安全性, 完整性和保密性。
在使用OpenSSL进行RSA过程模仿时要注意文件名的对应, 这需要我们在命名文件时能做到见名之意, 方便我们后续的操作。
命令行的书写方式需要我们对字母有一定的敏感性, 经常会出现字母出现问题而导致错误的发生。
rsa加密算法测试的用例及测试结果
rsa加密算法测试的用例及测试结果RSA加密算法是一种非对称加密算法,广泛应用于信息安全领域。
为了验证RSA加密算法的正确性和可靠性,我们设计了一系列的测试用例,并进行了测试。
以下是测试用例及测试结果的详细介绍。
测试用例1:生成密钥对输入:无输出:公钥和私钥测试结果:成功生成了一对公钥和私钥,公钥用于加密,私钥用于解密。
测试用例2:加密数据输入:明文数据、公钥输出:密文数据测试结果:使用公钥对明文数据进行加密,成功生成了密文数据。
测试用例3:解密数据输入:密文数据、私钥输出:明文数据测试结果:使用私钥对密文数据进行解密,成功还原了明文数据。
测试用例4:加密解密一致性输入:明文数据、公钥、私钥输出:解密后的明文数据测试结果:使用公钥对明文数据进行加密,再使用私钥对密文数据进行解密,得到的明文数据与原始明文数据完全一致。
测试用例5:加密解密性能输入:大量数据、公钥、私钥输出:解密后的明文数据测试结果:对大量数据进行加密和解密操作,测试时间和性能表现。
测试结果显示,RSA加密算法在处理大量数据时,性能较低,耗时较长。
测试用例6:安全性测试输入:密文数据、公钥输出:无法解密的数据测试结果:使用公钥对密文数据进行解密,结果显示无法还原明文数据,验证了RSA加密算法的安全性。
通过以上一系列的测试用例,我们验证了RSA加密算法的正确性和可靠性。
测试结果显示,RSA加密算法能够成功生成密钥对,对数据进行加密和解密,并且解密后的数据与原始数据完全一致。
同时,RSA加密算法在处理大量数据时性能较低,但在安全性方面表现出色。
总结起来,RSA加密算法是一种可靠且安全的加密算法,适用于信息安全领域。
在实际应用中,我们可以根据具体需求选择合适的加密算法,保护数据的安全性。
实验二:RSA公钥密码体制
实验二:RSA公钥密码加、解密技术一、实验目的通过编写RSA算法(小素数)程序,并运行此程序对实验数据进行加密和解密操作,使学生进一步掌握RSA公钥密码体制。
二、实验要求(1)用V C++写出加密、解密程序代码。
(要求完成加密和解密,明文仅限为英文字母、数字、空格和标点符号);(2)运行自己编写的程序,输入素数p=7,q=13:明文为最多两位整数学号:如2,23等,得出相应的密文,并对其解密,验证解密后得到的明文是否与输入的学号相同。
三、相关知识1976年,W.DiffieM.E.Hellman提出了公钥密码学的思想。
在公钥密码体制中,加密密钥和解密密钥是不一样的,加密密钥可以公开传播而不危及密码体制的安全性。
公钥密码体制主要有三种:RSA公钥密码体制、EIGamal公钥密码体制、Menezes-Vanstone公钥密码体制。
本次实验内容是关于RSA公钥密码体制。
RSA公钥密码体制的安全性是基于大整数的素分解问题的难解性。
其有自身的优缺点,优点是加密密钥可以公开传播,缺点是运算速度较慢。
算法描述:(本次试验只要求对小素数实现RSA算法)1. 密钥的产生1) 找出两个相异的素数P和Q,令N=P×Q,M=(P-1)(Q-1)。
2) 找出与M互素的整数E,且 1<E<M利用欧氏算法计算出整数D,使D×E≡1 MOD M。
欧氏算法:① n1←M,n2←E,b1←0,b2←1;② k=[n1/n2],r←n1-k*n2;③如果r≠0,则n1←n2,n2←r,t←b2,b2←b1-k*b2,b1←t;转第②步;④如果n2≠1,则E模M 不存在逆元;⑤如果n2=1,则E模M 的逆元为b2 mod M为什么有:E模M 的逆元为b2 mod M根据课本中定理5.6,只要E,M互素且1<E<M,则存在整数a, b使得:b*E + a*M=1于是: b*E mod M=1令 b1(0)=0,b2(0)=1,则:n1(0)=a1(0)n1(0)+b1(0)n2(0)n2(0)=a2(0)n1(0)+b2(0)n2(0)假设 i=j时成立,则有n1(j)=a1(j)n1(0)+b1(j)n2(0)n2(j)=a2(j)n1(0)+b2(j)n2(0)当i=j+1时有:n1(j+1)=n2(j)=a2(j)n1(0)+b2(j)n2(0)n2(j+1)=n1(j)-q(j)n2(j)= a1(j)n1(0)+b1(j)n2(0)- q(j){ a2(j)n1(0)+b2(j)n2(0) }=( a1(j)- q(j) a2(j))n1(0)+ ( b1(j)- q(j) b2(j) ) n2(0)这样循环下去,直到q(i)=0,n2(i)=1则b2(i)满足:b2(i)*E + a*M=1令:b2= b2(i) mod M ,则 b2*E mod M = 1故:b2是E关于模M的逆元3) 丢弃P和Q,公开E,D和N。
RSA算法实验报告
RSA算法实验报告一、实验目的本次实验的主要目的是深入理解和掌握 RSA 算法的原理及实现过程,通过实际操作和编程实现,验证 RSA 算法在加密和解密过程中的有效性和安全性,并分析其性能和特点。
二、实验原理RSA 算法是一种非对称加密算法,它基于数论中的大整数分解难题。
其密钥生成过程如下:1、选择两个大的质数 p 和 q。
2、计算 n = p q。
3、计算欧拉函数φ(n) =(p 1) (q 1)。
4、选择一个整数 e,满足 1 < e <φ(n),且 e 与φ(n) 互质。
5、计算 d,满足e d ≡ 1 (mod φ(n))。
公钥为(n, e),私钥为(n, d)。
加密过程:对于明文 m,计算密文 c = m^e (mod n)。
解密过程:对于密文 c,计算明文 m = c^d (mod n)。
三、实验环境本次实验使用的编程语言为 Python,使用的开发工具为 PyCharm。
四、实验步骤1、生成密钥```pythonimport randomdef generate_prime(bits):while True:num = randomgetrandbits(bits)if is_prime(num):return numdef is_prime(num):if num < 2:return Falsefor i in range(2, int(num05) + 1):if num % i == 0:return Falsereturn Truedef generate_keys(bits):p = generate_prime(bits // 2)q = generate_prime(bits // 2)n = p qphi_n =(p 1) (q 1)e = 65537 常见的选择d = pow(e, -1, phi_n)return (n, e),(n, d)```2、加密函数```pythondef encrypt(message, public_key):n, e = public_keymessage = intfrom_bytes(messageencode(),'big')ciphertext = pow(message, e, n)return ciphertext```3、解密函数```pythondef decrypt(ciphertext, private_key):n, d = private_keyplaintext = pow(ciphertext, d, n)plaintext = plaintextto_bytes((plaintextbit_length()+ 7) // 8, 'big')decode()return plaintext```4、测试```pythonpublic_key, private_key = generate_keys(1024)message ="这是要加密的消息"ciphertext = encrypt(message, public_key)decrypted_message = decrypt(ciphertext, private_key)print("原始消息:", message)print("加密后的密文:", ciphertext)print("解密后的消息:", decrypted_message)```五、实验结果与分析通过实验,成功生成了 RSA 算法的密钥对,并对给定的明文进行了加密和解密操作。
RSA实验报告2024
RSA实验报告(二)引言:RSA算法是一种公钥加密算法,被广泛应用于信息安全领域。
本次实验旨在通过实现RSA算法,深入理解其原理和实际应用。
本文将通过对RSA算法进行实验,并详细分析实验结果,探讨RSA算法的性能和安全性。
概述:RSA算法是由三位密学家Rivest、Shamir和Adleman于1977年共同提出的。
它基于数论中的大数分解问题,通过巧妙地利用素数和模幂运算的特性,实现了一种快速且安全的加密算法。
本次实验将从密钥对、加密和解密三个方面对RSA算法进行实验。
正文内容:一、密钥对1.选择素数:通过随机的方法选择两个大的素数p和q,保证其大小和位数的安全性。
2.计算n和φ(n):根据选择的p和q,计算出n和φ(n),其中n=pq,φ(n)为欧拉函数的值。
3.选择公钥:选择一个与φ(n)互质的整数e,作为公钥。
4.计算私钥:根据选择的公钥e和φ(n),通过扩展欧几里得算法计算出私钥d。
5.密钥完毕:将公钥(n,e)和私钥(n,d)存储起来,用于后续的加密和解密操作。
二、加密1.明文转化:将要加密的明文转化为对应的整数,使用ASCII 码或其他字符编码方式进行转化。
2.加密运算:使用公钥(n,e),对明文进行模幂运算,得到密文。
3.密文输出:将得到的密文输出。
三、解密1.密文转化:将接收到的密文转化为对应的整数。
2.解密运算:使用私钥(n,d),对密文进行模幂运算,得到解密后的明文。
3.明文输出:将得到的明文输出。
四、性能分析1.密钥长度:根据实验结果统计不同密钥长度下加密和解密的速度,比较性能差异。
2.加解密时间:通过实验测量不同明文长度下的加密和解密时间,分析RSA算法的执行效率。
3.密文大小:研究密文与明文的关联性,分析密文对明文的扩展效果。
4.安全性分析:基于已知攻击手段,分析RSA算法的安全性,包括素数选择、模幂运算等环节。
五、实验结果1.密钥:统计不同长度密钥所需时间,并分析其对RSA算法的影响。
实验二 RSA加密解密
实验二 RSA加密解密实验目的1.了解RSA算法的基本原理2.掌握RSA算法的实现方法3.通过实际编程了解非对称密码算法RSA的加密和解密过程,同时锻炼编程能力。
实验原理RSA算法的加密和解密过程在RSA算法中,每个实体有自己的公钥(e,n)及私钥(d,n),其中n=p*q,p,q是两个大素数,e*d=1modф(n),显然e应该满足gcd(e,ф(n))=1。
实体B加密消息m,将密文在公开信道上传送给实体A。
实体A接到密文后对其解密。
具体算法如下。
1)公钥的生成算法RSA的公钥生成算法十分简单,可以分为四步:(1)选择两个素数,p和q;(2)计算n=p×q和o=(p-1)×(q-1);(3)选择一个与o互质的数e;(4)找出一个d,使得e×d=1modz。
公开密钥是由(e,n)构成,私有密钥由(d,n)构成。
2)加密算法实体B的操作如下:(1)得到实体A的真实公钥(e,n);(2)把消息表示成整数m,0<m≤n-1;(3)使用平方-乘积算法,计算C=Ek(m)=memodn;(4)将密文C发送给实体A。
核心代码#include<iostream>#include<cmath>using namespace std;void main(){int p,q;cout<<"请输入两个较大的素数:"<<endl;cin>>p>>q;cout<<"p="<<p<<",q="<<q<<endl;int n,o;n=p*q;o=(p-1)*(q-1);cout<<"n="<<n<<",o="<<o<<endl;cout<<"请从【0,"<<o-1<<"】中选择一个与"<<o<<"互素的数e:"<<endl;int e,i;float d;cin>>e;for(i=1;;i++){d=(float)(o*i+1)/e;if(d-(int)d==0)break;}cout<<"e="<<e<<",d="<<d<<endl;cout<<"公开密钥Pk={e,n}={"<<e<<","<<n<<"}"<<endl; cout<<"秘密密钥Sk={d,n}={"<<d<<","<<n<<"}"<<endl; cout<<endl;cout<<"请输入要加密的正整数(以-1结束):"<<endl; int m1[500],m3[500],m4[7500];double m2[500];int j;for(j=0;j<500;j++){cin>>m1[j];if(m1[j]==-1)break;m2[j]=pow(m1[j],e);m4[j]=m2[j]/n;m3[j]=m2[j]-m4[j]*n;}cout<<"密文为:"<<endl;int k;for(k=0;k<j;k++)cout<<m3[k]<<" ";cout<<endl;}实验总结与心得体会通过做这个实验充分了解其原理,在这个实验中,这个实验中公钥和私钥的产生没什么问题,而在加密与解密的过程中,由于中间结果会非常大,pow函数不能实现功能,所以必须将中间结果对n取模,才能使计算切实可行。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
RSA算法的C语言实现
一、RSA 算法的描述
1、选取长度相等的两个大素数p 和q,计算其乘积:n = pq,然后随机选取加密密钥e,使e 和(p–1)(q–1)互素。
最后用欧几里德扩展算法计算解密密钥d,以满足ed = 1(mod(p–1) ( q–1))即d = e–1 mod((p–1)(q–1)),e 和n 是公钥,d 是私钥。
2、加密公式如下:
ci = mi^e(mod n)
3、解密时,取每一密文分组ci 并计算:
mi = ci^d(mod n)
Ci^d =(mi^e)^d
= mi^(ed)
= mi^[k(p–1)(q–1)+1 ]
= mi mi^[k(p–1)(q–1)]
= mi *1 = mi
4、消息也可以用d 加密用e 解密
二、流程图
三、代码
#include <stdio.h>
int candp(int a,int b,int c) //数据处理函数,实现幂的取余运算{ int r=1;
b=b+1;
while(b!=1)
{
r=r*a;
r=r%c;
b--;
}
printf("%d\n",r);
return r;
}
int fun(int x,int y) //公钥e 与t 的互素判断{
int t;
while(y)
{
t=x;
x=y;
y=t%y;
}
if(x == 1)
return 0; //x 与y 互素时返回0
else
return 1; //x 与y 不互素时返回1
}
void main()
{
int p,q,e,d,m,n,t,c,r;
printf("请输入两个素数p,q: ");
scanf("%d%d",&p,&q);
n=p*q;
printf("计算得n 为%3d\n",n);
t=(p-1)*(q-1); //求n 的欧拉数
printf("计算得t 为%3d\n",t);
printf("请输入公钥e: ");
scanf("%d",&e);
if(e<1||e>t||fun(e,t))
{
printf("e 不合要求,请重新输入: "); //e<1 或e>t 或e 与t 不互素时,重新输入
scanf("%d",&e);
}
d=1;
while(((e*d)%t)!=1) d++; //由公钥e 求出私钥d
printf("经计算d 为%d\n",d);
printf("加密请输入1\n"); //加密或解密选择
printf("解密请输入2\n");
scanf("%d",&r);
switch(r)
{
case 1: printf("请输入明文m: "); //输入要加密的明文数字
scanf("%d",&m);
c=candp(m,e,n);
printf("密文为%d\n",c);break;
case 2: printf("请输入密文c: "); //输入要解密的密文数字
scanf("%d",&c);
m=candp(c,d,n);
printf("明文为%dd\n",m);break;
}
}
四、运行结果及分析
输入的两个素数是21和23,根据n=p*q,计算出n=21*23=483,根据t=(p-1)*(q-1),计算出t=20*22=440,输入与t互素的公钥e,此时输入的e 为13,计算出私钥d为237,选择1进行加密,输入明文123456,调用加密函数后加密的结果为396,与用加密公式ci = mi^e(mod n)进行计算的结果是一样的。