当前位置:首页 » 操作系统 » rsa算法过程

rsa算法过程

发布时间: 2022-04-14 06:50:21

1. rsa解密算法

我刚刚复习完关于rsa的算法知识,告诉你吧:
RSA公钥密码系统:
1.密钥对的产生:随机产生两个大的素数:p,q 计算n=p×q
2.随机产生加密密钥e:选择一个随机的e使Gcd(e,(p-1)*(q-1))= 1就是选择一个随机的e,使e和 (p-1)*(q-1)互素。通常e也选择成素数。
这样,公钥对(n,e)就产生了
3.计算解密密钥d:计算一个数d 条件是使得e*d mod (p-1)*(q-1)=1,其中n与d也要互素。
这样就产生了私钥对(n,d)

发送者给持有密钥(n,d)的人发送某数M
发送密文C=M^e mod n

接受者利用私钥解密M=C^d mod n

计算模指数当然需要特殊的算法啦,要不然计算机也没办法算啊:算法如下:
#include <iostream>
#include <cmath>
using namespace std;

int exp_mod(int a,int n,int z)
{
int exp = 1;
int x = a % z;
while (n>0)
{
if(n%2==1)
exp = (exp * x) % z;
x = (x * x) % z;
n = n/2;
}
return exp;

}

int main()
{
int a,n,z;
cout<< "请输入底数: ";
cin>>a;
cout<< "请输入指数: ";
cin>>n;
cout<< "请输入被模数: ";
cin>>z;
int result = exp_mod(a,n,z);

cout<< "结果是:"<<result<<endl;
cout<<"普通算法结果"<<long(pow(a,n))%z <<endl;/*double pow(int
x,int y)求x的y次方*/

return 0;
}
这个是算A^B mod C 的C++源码

希望对你有帮助,好的话别忘了加分啊!

2. 什么是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)就是密钥对。
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;
补充回答:
对明文进行加密,有两种情况需要这样作:
1、您向朋友传送加密数据,您希望只有您的朋友可以解密,这样的话,您需要首先获取您朋友的密钥对中公开的那一个密钥,e及n。然后用这个密钥进行加密,这样密文只有您的朋友可以解密,因为对应的私钥只有您朋友拥有。
2、您向朋友传送一段数据附加您的数字签名,您需要对您的数据进行MD5之类的运算以取得数据的"指纹",再对"指纹"进行加密,加密将使用您自己的密钥对中的不公开的私钥。您的朋友收到数据后,用同样的运算获得数据指纹,再用您的公钥对加密指纹进行解密,比较解密结果与他自己计算出来的指纹是否一致,即可确定数据是否的确是您发送的、以及在传输过程中是否被篡改。
密钥的获得,通常由某个机构颁发(如CA中心),当然也可以由您自己创建密钥,但这样作,您的密钥并不具有权威性。
计算方面,按公式计算就行了,如果您的加密强度为1024位,则结果会在有效数据前面补0以补齐不足的位数。补入的0并不影响解密运算。

3. RSA算法的原理及演算过程

RSA算法非常简单,概述如下:
找两素数p和q
取n=p*q
取t=(p-1)*(q-1)
取任何一个数e,要求满足e<t并且e与t互素(就是最大公因数为1)
取d*e%t==1

这样最终得到三个数: n d e

设消息为数M (M <n)
设c=(M**d)%n就得到了加密后的消息c
设m=(c**e)%n则 m == M,从而完成对c的解密。
注:**表示次方,上面两式中的d和e可以互换。

在对称加密中:
n d两个数构成公钥,可以告诉别人;
n e两个数构成私钥,e自己保留,不让任何人知道。
给别人发送的信息使用e加密,只要别人能用d解开就证明信息是由你发送的,构成了签名机制。
别人给你发送信息时使用d加密,这样只有拥有e的你能够对其解密。

rsa的安全性在于对于一个大数n,没有有效的方法能够将其分解
从而在已知n d的情况下无法获得e;同样在已知n e的情况下无法
求得d。

RSA简洁幽雅,但计算速度比较慢,通常加密中并不是直接使用RSA 来对所有的信息进行加密,
最常见的情况是随机产生一个对称加密的密钥,然后使用对称加密算法对信息加密,之后用
RSA对刚才的加密密钥进行加密。

最后需要说明的是,当前小于1024位的N已经被证明是不安全的
自己使用中不要使用小于1024位的RSA,最好使用2048位的。

4. RSA算法 写出加解密过程

没有e没法求d p和q也没给 我郁闷
先说欧几里得算法,这个是一个函数,求的话累死。
欧几里得算法是求最大公约数的,求逆元用扩展的欧几里得算法
原理:
如果gcd(a,b)=d,则存在m,n,使得d = ma + nb,称呼这种关系为a、b组合整数d,m,n称为组合系数。当d=1时,有 ma + nb = 1 ,此时可以看出m是a模b的乘法逆元,n是b模a的乘法逆元。
int gcd(int a, int b , int&; ar,int &; br)
{
int x1,x2,x3;
int y1,y2,y3;
int t1,t2,t3;
if(0 == a)
{//有一个数为0,就不存在乘法逆元

ar = 0;

br = 0 ;

return b;
}
if(0 == b)
{

ar = 0;

br = 0 ;

return a;
}
x1 = 1;x2 = 0;x3 = a;
y1 = 0;y2 = 1;y3 = b;
int k;
for( t3 = x3 % y3 ; t3 != 0 ; t3 = x3 % y3)
{

k = x3 / y3;t2 = x2 - k * y2;t1 = x1 - k * y1;

x1 = y1;x1 = y2;x3 = y3;

y1 = t1;y2 = t2;y3 = t3;
}
if( y3 == 1)
{ //有乘法逆元

ar = y2;

br = x1;

return 1;
}

else

{ //公约数不为1,无乘法逆元。这个是存在逆元的充要条件

ar = 0;

br = 0;

return y3;
}
}
核心是
for( t3 = x3 % y3 ; t3 != 0 ; t3 = x3 % y3)
{

k = x3 / y3;t2 = x2 - k * y2;t1 = x1 - k * y1;

x1 = y1;x1 = y2;x3 = y3;

y1 = t1;y2 = t2;y3 = t3;
}
一共有三行
x1 ,x2 ,x3
y1 ,y2 ,y3
t1 ,t2 ,t3
每次循环第三行都是算出来的 然后 把第一行y的值放到x t的值放到y
这三行都满足一个共同的性质
第一个数*a+第二个数*b=第三个数
比如x1*a+x2*b=x3
每次循环问题都会简化,距离结果更进
直到
当最终t3迭代计算到1时,有t1× a + t2 × b = 1,显然,t1是a模b的乘法逆元,t2是b模a的乘法逆元。

生成p,q两个素数,产生方法就是随机产生一个数,然后用素性检验算法判断是不是素数,如果不是再随机产生一个判断。关于素性经验,这个问题很大,是本数论书都有,这里没法展开讲。
比如p=3,q=11
生成n=p*q=33
生成n的欧拉函数 N=(p-1)*(q-1)=20
选取公钥e=3 然后计算d
e*d=1(mod N) e和d是关于模N的互为逆元的关系,用扩展的欧几里得算法
得出来d=7 也就是说3*7=1(mod 20)
加密用e M的每个字母转换成ASCII码 设明文字母为m 密文为c
加密过程:c=m的e次方(mod n) 也就说c=m的三次方(mod 33)
解密过程:m=c的d次方(mod n) 也就是说m=c的7次方(mod 33)

网络知道没有公式编辑器让我很痛苦
注意别把N=(p-1)*(q-1)和n=p*q搞混了 N用于求d n用于加密解密

RSA我熟的很 还做过一个ppt 实现还有简单的一些弱点 本来想发给楼主 但是貌似我换了7-zip后把我以前的压缩包打不开了 也可能损坏了

5. rsa算法具体过程

加密:C=M的E次方mod N

mod表示模运算

3的7次方 模 20等于7 所以加密后密文就是7

解密:M=C的D次方mod N

7的3次方 模 20等于3 所以解密密后就得到明文 就是原来的3

6. 一个RSA算法的加密运算,需要完整的演算过程。

RSA算法非常简单,概述如下:
找两素数p和q
取n=p*q
取t=(p-1)*(q-1)
取任何一个数e,要求满足e<t并且e与t互素(就是最大公因数为1)
取d*e%t==1
这样最终得到三个数:
n
d
e
设消息为数M
(M
<n)
设c=(M**d)%n就得到了加密后的消息c
设m=(c**e)%n则
m
==
M,从而完成对c的解密。
注:**表示次方,上面两式中的d和e可以互换。
在对称加密中:
n
d两个数构成公钥,可以告诉别人;
n
e两个数构成私钥,e自己保留,不让任何人知道。
给别人发送的信息使用e加密,只要别人能用d解开就证明信息是由你发送的,构成了签名机制。
别人给你发送信息时使用d加密,这样只有拥有e的你能够对其解密。
rsa的安全性在于对于一个大数n,没有有效的方法能够将其分解
从而在已知n
d的情况下无法获得e;同样在已知n
e的情况下无法
求得d。
rsa简洁幽雅,但计算速度比较慢,通常加密中并不是直接使用rsa
来对所有的信息进行加密,
最常见的情况是随机产生一个对称加密的密钥,然后使用对称加密算法对信息加密,之后用
RSA对刚才的加密密钥进行加密。
最后需要说明的是,当前小于1024位的N已经被证明是不安全的
自己使用中不要使用小于1024位的RSA,最好使用2048位的。

7. RSA算法的介绍

RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。1987年首次公布,当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准。今天只有短的RSA钥匙才可能被强力方式解破。到2008年为止,世界上还没有任何可靠的攻击RSA算法的方式。只要其钥匙的长度足够长,用RSA加密的信息实际上是不能被解破的。但在分布式计算和量子计算机理论日趋成熟的今天,RSA加密安全性受到了挑战。RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但是想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。

8. RSA算法的具体过程

具体过程很复杂哦。主要思想是基于大数分解的复杂度:
例如:
你的明文是abc,可用ASCII等方式化成整数串,例如化成117.
选取密钥为129,
开始加密,进行质数计算:117*129=15093。 这个过程很快。

把密文15093公开到网络上。
敌人解密时,只知道15093,想要得到117会花费很长的时间。解密非常控困难。

而你的朋友由于知道密钥129,则可以很快得到明文117.

9. RSA加密算法原理

RSA加密算法是一种典型的非对称加密算法,它基于大数的因式分解数学难题,它也是应用最广泛的非对称加密算法,于1978年由美国麻省理工学院(MIT)的三位学着:Ron Rivest、Adi Shamir 和 Leonard Adleman 共同提出。

它的原理较为简单,假设有消息发送方A和消息接收方B,通过下面的几个步骤,就可以完成消息的加密传递:
消息发送方A在本地构建密钥对,公钥和私钥;
消息发送方A将产生的公钥发送给消息接收方B;
B向A发送数据时,通过公钥进行加密,A接收到数据后通过私钥进行解密,完成一次通信;
反之,A向B发送数据时,通过私钥对数据进行加密,B接收到数据后通过公钥进行解密。
由于公钥是消息发送方A暴露给消息接收方B的,所以这种方式也存在一定的安全隐患,如果公钥在数据传输过程中泄漏,则A通过私钥加密的数据就可能被解密。
如果要建立更安全的加密消息传递模型,需要消息发送方和消息接收方各构建一套密钥对,并分别将各自的公钥暴露给对方,在进行消息传递时,A通过B的公钥对数据加密,B接收到消息通过B的私钥进行解密,反之,B通过A的公钥进行加密,A接收到消息后通过A的私钥进行解密。
当然,这种方式可能存在数据传递被模拟的隐患,但可以通过数字签名等技术进行安全性的进一步提升。由于存在多次的非对称加解密,这种方式带来的效率问题也更加严重。

10. RSA加密算法,求大神帮解答

如果用一段已经知道的明文,经过公钥加密,得到密文。现在已知明文密文和n, 是不是就可以通过解密的公式不断的幂运算求出私钥d呢?

热点内容
苹果搬家到安卓怎么办 发布:2024-09-29 07:13:46 浏览:355
编程猫登录平台 发布:2024-09-29 07:03:27 浏览:312
xp无线密码怎么看 发布:2024-09-29 06:48:23 浏览:202
命理与数据库 发布:2024-09-29 06:39:19 浏览:448
华为电脑本机网站配置怎么打开 发布:2024-09-29 06:26:11 浏览:518
android屏幕截图源码 发布:2024-09-29 06:22:06 浏览:540
天籁速派哪个配置好 发布:2024-09-29 06:21:15 浏览:112
高计算型云服务器的应用场景 发布:2024-09-29 06:21:14 浏览:307
Linux在嵌入式开发 发布:2024-09-29 05:36:06 浏览:611
mysql创建表的sql语句 发布:2024-09-29 04:24:46 浏览:331