RSA算法的实现实验报告
- 格式:doc
- 大小:44.00 KB
- 文档页数:4
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 = mi4、消息也可以用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 互素时返回0elsereturn 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 求出私钥dprintf("经计算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)进行计算的结果是一样的。
第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算法是一种基于大数因子分解的非对称加密算法,由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加密算法学号:专业及班级:计网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。
RSA算法的实现实验报告一、实验目的本实验的主要目的是了解和掌握RSA(Rivest-Shamir-Adleman)算法的原理以及其在加密和解密过程中的具体实现。
通过实践和对比分析,了解RSA算法的安全性和效率,并加深对大数计算的理解。
二、算法原理1.密钥生成(1)选择两个大素数p和q,并计算其乘积n=p*q。
(2)计算n的欧拉函数φ(n)=(p-1)*(q-1)。
(3)选择一个整数e,满足1<e<φ(n),并且e与φ(n)互质,即gcd(e, φ(n)) = 1(4)计算e的乘法逆元d,满足e*d ≡ 1 (mod φ(n))。
(5)公钥为(n,e),私钥为(n,d)。
2.加密加密过程使用公钥对明文进行加密:(1)明文转化为整数m,满足0≤m<n。
(2)计算密文c = m^e mod n。
3.解密解密过程使用私钥对密文进行解密:(1)计算明文m = c^d mod n。
(2)还原明文。
三、实验步骤1.实现大数的运算由于RSA算法的关键在于处理大数运算,我们首先实现了大数的加法、减法和乘法运算,并使用这些运算函数作为之后RSA算法中的基础运算。
2.实现RSA算法的密钥生成(1)随机选择两个大素数p和q。
(2)计算n=p*q。
(3)计算φ(n)=(p-1)*(q-1)。
(4)选择一个满足要求的公钥e。
(5)计算e的乘法逆元d。
(6)生成公钥(n,e)和私钥(n,d)。
3.实现RSA算法的加密和解密(1)输入明文。
(2)使用公钥对明文进行加密。
(3)得到密文。
(4)使用私钥对密文进行解密。
(5)还原明文。
四、实验结果与分析我们使用python语言实现了RSA算法,并进行了一些测试和分析,得到以下结果和结论。
1.RSA算法的安全性2.RSA算法的效率3.实验结果分析我们对一些常见文本进行了加密和解密实验,得到了正确的结果。
实验结果表明,RSA算法能够对数据进行有效的加密和解密,并确保数据的安全性。
RSA算法实验【实验目的】1.了解RSA算法的基本原理2.掌握RSA算法的实现方法3.通过实际编程了解非对称密码算法RSA的加密和解密过程,同时锻炼编程能力。
【实验环境】1. 应用软件:Microsoft VC++2. 操作系统:Windows XP【实验预备知识点】1. RSA密码系统所基于的数学难题是对大素数的因式分解。
2. RSA算法原理:(1).选择两个大的素数p 和q(典型情况下为1024 位)(2).计算n = p * q 和z =(p-1)*(q-1).(3).选择一个与z 互素的数,将它称为d(4).找到e,使其满足e*d = 1 mod z提前计算出这些参数以后,我们就可以开始执行加密了。
【实验内容】◆自行以2位小素数为p,q,3为公钥e,构造一个小的RSA系统,对“a、b、c、d”这4个字母进行加密,解密◆在密码教学系统中实现RSA运算的大素数、公钥、私钥的生成、明文加解密、分块大小的选择◆了解在不同分块大小的情况下,RSA系统的密文长度也会有所变化◆了解在不同参数的情况下,RSA系统的性能变化【实验步骤】1.熟悉RSA运算原理;2.打开实验程序,如图1;3.选择密钥长度为128、256、512或者1024比特;4.点击“随机求取N,E,D”按钮,得到大整数N,公钥E,密钥D;5.在明文对话框中输入需要加密的明文字符串;6.点击“加密”按钮可获得加密后的密文,点击“解密”按钮可获得解密后的明文;或者7.自己输入大整数N、公钥E、密钥D,然后点击按钮“自己输入N,E,D”就激活明文输入框。
(自己输入的数都是16进制的数)8.在明文对话框中输入需要加密的明文字符串;9.点击“加密”按钮可获得加密后的密文,点击“解密”按钮可获得解密后的明文;10.运算用时:显示的是随机求取N,E,D时,程序运行所需要的时间。
图1 RSA算法实验【实验过程】1.随机求取N,E,D:点击“随机求取N,E,D”按钮,得到下图所示的N,E,D.2.输入明文abcd,点击“加密”按钮,得到加密后的密文。
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算法原理及其数学基础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一、实验目的通过实际编程了解非对称密码算法RSA勺加密和解密过程,加深对非对称密码算法的认识。
二、实验环境运行Windows或Linux操作系统的PC机,具有版本的Java语言编译环境。
三、实验内容和步骤1、对RSA算法的理解RSA算法(公开密钥算法)的原理:(1) •选择两个大的素数p和q (典型情况下为1024位)(2) .计算n = p * q 和z = ( p-1 ) * ( q-1 ) .(3) .选择一个与z 互素的数,将它称为d⑷. 找到e,使其满足e*d = 1 mod z提前计算出这些参数以后,我们就可以开始执行加密了。
首先将明文分成块,使得每个明文消息P落在间隔0*P<n中。
为了做到这一点,只要将明文划分成k 位的块即可,这里k是满足2A k<n的最大整数。
为了加密一个消息P,只要计算C=P A e(mod n)即可。
为了解密C,只要计算P=C A d(modn)即可。
可以证明,对于指定范围内的所有P,加密盒解密互为反函数。
为了执行加密,你需要e和n;为了执行解密,你需要d和n。
因此,公钥是有(e,n)对组成,而私钥是有(d,n)对组成。
实例:根据已知参数:p=3,q=11,M=2计算公私钥,并对明文进行加密,然后对密文进行解密。
由题意知:n = p * q = 33, z = (p-1 ) * (q-1 )= 20,选 d = 7,计算得e=3,所以C=MAe(mod n) = 8M=CAd(mod n) = 22、RSA 算法与DES 算法的比较:运行附件的RSATool,输入一大段文字,记录运行时间。
再使用DES算法加密相同的文字,记录运行时间,对比这两个时间发现,RSA算法比DES算法慢很多,因为RSA算法进行的是大数运算,所以程序运行的速度比DES慢很多。
因此RSA算法只适合于少量数据加密,不适合于大量数据加密。
3、算法设计主要的方法:(1)、public static void GetPrime()方法名称:产生大数的方法。
现代密码学实验报告题目: RSA算法的实现过程
一、实验目的
二、简单实现RSA过程, 通过OpenSSL命令编辑器实现发送方对明文进行加
密, 签名, 接受方验证, 解密的简单过程。
三、实验原理
RSA加密算法的基本流程:
四、实验步骤
发送方对明文进行加密:
首先利用MD5对明文进行摘要操作:
然后生成秘钥文件:
再利用这个密钥对摘要进行加密:
然后对摘要进行签名操作:
发送方加密后要发送的东西是: 明文和摘要的签名传送到接收方后,接收方进行解密操作:
接收方进行验证:
通过比较可以发现所得摘要的结果是相同的, 则可以得到结论: 该明文没有被篡改。
五、实验心得
通过对RSA过程的简单模仿, 我们可以明白理论和现实是有一定差别的, 我们需要将明文利用MD5进行摘要处理, 然后在通过MD5对摘要进行验证, 从而判断密文是否经过修改, 达到数据的安全性, 完整性和保密性。
在使用OpenSSL进行RSA过程模仿时要注意文件名的对应, 这需要我们在命名文件时能做到见名之意, 方便我们后续的操作。
命令行的书写方式需要我们对字母有一定的敏感性, 经常会出现字母出现问题而导致错误的发生。
密码学实验报告学院名称:通信与信息工程学院实验名称:RSA密码算法实现【实验名称】RSA密码算法实现【实验目的】1、了解公钥密码体制的基本思想。
2、掌握公钥密码算法RSA,并体会其设计思想。
3、学会分析RSA算法的安全性。
【实验原理及步骤】实验原理:RSA 的安全性依赖于大数分解。
公钥和私钥都是两个大素数(大于 100 个十进制位)的函数。
据猜测,从一个密钥和密文推断出明文的难度等同于分解两个大素数的积。
密钥对的产生。
选择两个大素数,p 和 q 。
计算:n = p × q然后随机选择加密密钥 e,要求 e 和 ( p - 1 ) × ( q - 1 ) 互质。
最后,利用 Euclid 算法计算解密密钥 d, 满足e × d = 1 ( mod ( p - 1 ) × ( q - 1 ) )其中 n 和 d 也要互质。
数 e 和 n 是公钥,d 是私钥。
两个素数 p 和 q 不再需要,应该丢弃,不要让任何人知道。
加密信息 m(二进制表示)时,首先把 m 分成等长数据块 m1 ,m2,..., mi ,块长 s,其中 2^s ≤ n, s 尽可能的大。
对应的密文是:ci = mi^e ( mod n )解密时作如下计算:mi = ci^d ( mod n )RSA算法以两个大素数的乘积作为算法的公钥来加密消息,而密文的解密必须知道相应的两个大素数。
实验步骤:1、分析它的算法原理。
2、在vc++6.0上编写源程序。
源程序如下:3、运行,调试,得出结果。
【实验结果】【实验分析与心得体会】经过此次实验,我了解了公钥密码体制的基本思想,基本了掌握公钥密码算法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算法的实现实验原理算法原理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算法实验报告引言RSA算法是一种非对称加密算法,广泛应用于信息安全领域。
本实验旨在通过实际操作,深入了解RSA算法的原理和应用。
一、RSA算法原理RSA算法是基于大数因子分解的数论问题,其基本原理如下:1. 选择两个大素数p和q,并计算n=p*q。
2. 计算欧拉函数φ(n)=(p-1)*(q-1)。
3. 选择一个小于φ(n)且与φ(n)互质的整数e,作为公钥。
4. 计算e关于φ(n)的模反元素d,作为私钥。
5. 公钥为(n, e),私钥为(n, d)。
6. 加密过程:将明文m通过公钥进行加密,得到密文c=(m^e) mod n。
7. 解密过程:将密文c通过私钥进行解密,得到明文m=(c^d) mod n。
二、实验步骤1. 选择两个大素数p和q,并计算n=p*q。
2. 计算欧拉函数φ(n)=(p-1)*(q-1)。
3. 选择一个小于φ(n)且与φ(n)互质的整数e,作为公钥。
4. 计算e关于φ(n)的模反元素d,作为私钥。
5. 生成公钥(n, e)和私钥(n, d)。
6. 输入明文m。
7. 加密过程:计算密文c=(m^e) mod n。
8. 解密过程:计算明文m=(c^d) mod n。
9. 输出解密后的明文m。
三、实验结果本次实验选择了p=61,q=53作为素数,计算得到n=3233,φ(n)=3120。
选择e=17作为公钥,计算得到d=2753作为私钥。
输入明文m=1234,经过加密过程得到密文c=855。
再经过解密过程,得到解密后的明文m=1234。
四、实验分析通过本次实验,我们可以看到RSA算法具有较高的安全性和可靠性。
由于大素数因子分解问题的难解性,即使知道公钥(n, e)和密文c,也很难推导出私钥d 和明文m。
这使得RSA算法成为一种重要的加密算法。
然而,RSA算法的加解密过程涉及大数的运算,速度较慢,特别是对于较长的密钥长度。
因此,在实际应用中,需要权衡安全性和效率,选择合适的密钥长度。
RSA算法的实现一、实验目的1. 熟悉公钥密码体制;2.掌握产生密钥对的程序设计方法;3.掌握产生加密/解密的程序设计方法。
二、实验内容和要求1.进行RSA加密/解密算法的设计;2.对RSA程序进行编译和调试;3.使用编写的程序进行加密和解密。
三、实验环境运行Windows操作系统的PC机,可以利用具有VC++语言环境;如果所运用的语言是JAVA,那么也可以利用JAVA语言环境来实现RSA算法的加密和解密。
四、实验步骤1.采用C++语言进行本次实验的编写,实验的代码如下:#include <stdio.h>#include<conio.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;}void main(){int p,q,e,d,m,n,t,c,r;char s;printf("please input the p,q: ");scanf("%d%d",&p,&q);n=p*q;printf("the n is %3d\n",n);t=(p-1)*(q-1);printf("the t is %3d\n",t);printf("please input the e: ");scanf("%d",&e);if(e<1||e>t){printf("e is error,please input again: ");scanf("%d",&e);}d=1;while(((e*d)%t)!=1) d++;printf("then caculate out that the d is %d\n",d);printf("the cipher please input 1\n");printf("the plain please input 2\n");scanf("%d",&r);switch(r){case 1: printf("input the m: "); /*输入要加密的明文数字*/ scanf("%d",&m);c=candp(m,e,n);printf("the cipher is %d\n",c);break;case 2: printf("input the c: "); /*输入要解密的密文数字*/ scanf("%d",&c);m=candp(c,d,n);printf("the cipher is %d\n",m);break;}getch();}2、代码的思想:首先随意输入两个素数p和q,然后利用算法计算出p*q 即n,再算出(p-1)*(q-1)即t,并且同时输出计算的结果n和t,接下来输入e,经过算法可以计算出d,由此可以知道RSA算法的公钥和私钥;接下来可以有两个选择:一选择输入明文,有明文经过算法可以计算出密文;二输入密文,有密文经过算法可以计算出明文。
RSA算法的实现
一、实验目的
1. 熟悉公钥密码体制;
2.掌握产生密钥对的程序设计方法;
3.掌握产生加密/解密的程序设计方法。
二、实验内容和要求
1.进行RSA加密/解密算法的设计;
2.对RSA程序进行编译和调试;
3.使用编写的程序进行加密和解密。
三、实验环境
运行Windows操作系统的PC机,可以利用具有VC++语言环境;如果所运用的语言是JAVA,那么也可以利用JAVA语言环境来实现RSA算法的加密和解密。
四、实验步骤
1.采用C++语言进行本次实验的编写,实验的代码如下:
#include <stdio.h>
#include<conio.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;
}
void main()
{
int p,q,e,d,m,n,t,c,r;
char s;
printf("please input the p,q: ");
scanf("%d%d",&p,&q);
n=p*q;
printf("the n is %3d\n",n);
t=(p-1)*(q-1);
printf("the t is %3d\n",t);
printf("please input the e: ");
scanf("%d",&e);
if(e<1||e>t)
{
printf("e is error,please input again: ");
scanf("%d",&e);
}
d=1;
while(((e*d)%t)!=1) d++;
printf("then caculate out that the d is %d\n",d);
printf("the cipher please input 1\n");
printf("the plain please input 2\n");
scanf("%d",&r);
switch(r)
{
case 1: printf("input the m: "); /*输入要加密的明文数字*/ scanf("%d",&m);
c=candp(m,e,n);
printf("the cipher is %d\n",c);break;
case 2: printf("input the c: "); /*输入要解密的密文数字*/ scanf("%d",&c);
m=candp(c,d,n);
printf("the cipher is %d\n",m);break;
}
getch();
}
2、代码的思想:首先随意输入两个素数p和q,然后利用算法计算出p*q 即n,再算出(p-1)*(q-1)即t,并且同时输出计算的结果n和t,接下来输入e,经过算法可以计算出d,由此可以知道RSA算法的公钥和私钥;接下来可以有两个选择:一选择输入明文,有明文经过算法可以计算出密文;二输入密文,有密文经过算法可以计算出明文。
3、运行以上代码就可以得到实验的结果。
五、实验结果
实验结果如下图所示:
六、实验心得:
通过这次的实验,了解了非对称密码算法RSA,会运用一些现成的算法进行编程,对一些比较复杂的算法开始基本认识并深刻的掌握。
在以后所涉及这方面的知识将会有全新的了解和掌握。
实
验
报
告
姓名:刘新平
专业:互联网
班级:10-03班
学号:541012010313。