rsa算法的流程
RSA算法安全性本质是三大数学困难问题之一也就是大数分解问题,因为目前尚没有一种有效的方法可以在短时间内分解两个大素数的乘积。验证步骤如上面所说的,原理书上有,具体程序实现简单讲一下
判断质数,这是基本水平,可以穷举也可以建表,按自己喜好
这一步是计算两个大素数乘积没什么好说的
判断两个数互质,一般采用欧几里得算法,辗转相除直到得到gcd(e1,m)=1。当然你也可以穷举公因数一直到sqrt(min{e1,m})
计算乘法逆元是依靠广义欧几里得算法,乘法逆元的意思是形如a*a1 ≡ 1(mod m)这样的(因为这里的群的乘法定义就是数学乘法),a和a1互为彼此模m的逆元,记作a1=a^-1 mod m,只有gcd(a,m)=1时才有唯一解否则无解。
计算方法是广义欧几里得除法,设r0=m,r1=a,s0=1,s1=0,t0=0,t1=1;
计算ai=[r(i-1)/ri],r(i+1)=r(i-1)-airi,s(i+1)=s(i-1)-aisi,t(i+1)=t(i-1)-aiti,直到ri=0
举例如a=7,m=13,计算a^-1 mod m:
a1=[13/7]=1,r2=r0-a1r1=6,s2=s0-a1s1=1,t2=t0-a1t1=-1;
a2=[7/6]=1,r3=r1-a2r2=1,s3=s1-a2s2=-1,t3=t1-a2t2=2;
a3=[6/1]=6,r4=r2-a3r3=0.
取s=s3=-1,t=t3=2,则有7*2-1*13=1,故a^-1mod m=t=2。
把上面的方法写成C++算法应该很简单
5和6都是计算同余没什么好说的,记得要用到a^e≡b^e(mod m)化简
要毕业了还搞不懂逆元有点拙计啊,回去好好看看离散数学吧
㈡ rsa加密算法
rsa加密算法如下:
算法原理:
RSA公开密钥密码体制的原理是:根据数论,寻求两个大素数比较简单,而将它们的乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥
㈢ rsa算法具体过程
加密:C=M的E次方mod N
mod表示模运算
3的7次方 模 20等于7 所以加密后密文就是7
解密:M=C的D次方mod N
7的3次方 模 20等于3 所以解密密后就得到明文 就是原来的3
㈣ RSA加密算法,求大神帮解答
如果用一段已经知道的明文,经过公钥加密,得到密文。现在已知明文密文和n, 是不是就可以通过解密的公式不断的幂运算求出私钥d呢?
㈤ 简述RSA算法中密钥的产生,数据加密和解密的过程,并简单说明RSA算法安全性的原理。
RSA算法的数学原理
RSA算法的数学原理:
先来找出三个数, p, q, r,
其中 p, q 是两个相异的质数, r 是与 (p-1)(q-1) 互质的数。
p, q, r 这三个数便是 private key。接着, 找出m, 使得 rm == 1 mod (p-1)(q-1)..... 这个 m 一定存在, 因为 r 与 (p-1)(q-1) 互质, 用辗转相除法就可以得到了..... 再来, 计算 n = pq....... m, n 这两个数便是 public key。
编码过程是, 若资料为 a, 将其看成是一个大整数, 假设 a < n.... 如果 a >= n 的话, 就将 a 表成 s 进位 (s <= n, 通常取 s = 2^t), 则每一位数均小于 n, 然后分段编码...... 接下来, 计算 b == a^m mod n, (0 <= b < n), b 就是编码后的资料...... 解码的过程是, 计算 c == b^r mod pq (0 <= c < pq), 于是乎, 解码完毕...... 等会会证明 c 和 a 其实是相等的 :) 如果第三者进行窃听时, 他会得到几个数: m, n(=pq), b...... 他如果要解码的话, 必须想办法得到 r...... 所以, 他必须先对 n 作质因数分解......... 要防止他分解, 最有效的方法是找两个非常的大质数 p, q, 使第三者作因数分解时发生困难......... <定理> 若 p, q 是相异质数, rm == 1 mod (p-1)(q-1), a 是任意一个正整数, b == a^m mod pq, c == b^r mod pq, 则 c == a mod pq 证明的过程, 会用到费马小定理, 叙述如下: m 是任一质数, n 是任一整数, 则 n^m == n mod m (换另一句话说, 如果 n 和 m 互质, 则 n^(m-1) == 1 mod m) 运用一些基本的群论的知识, 就可以很容易地证出费马小定理的........ <证明> 因为 rm == 1 mod (p-1)(q-1), 所以 rm = k(p-1)(q-1) + 1, 其中 k 是整数 因为在 molo 中是 preserve 乘法的 (x == y mod z and u == v mod z => xu == yv mod z), 所以, c == b^r == (a^m)^r == a^(rm) == a^(k(p-1)(q-1)+1) mod pq 1. 如果 a 不是 p 的倍数, 也不是 q 的倍数时, 则 a^(p-1) == 1 mod p (费马小定理) => a^(k(p-1)(q-1)) == 1 mod p a^(q-1) == 1 mod q (费马小定理) => a^(k(p-1)(q-1)) == 1 mod q 所以 p, q 均能整除 a^(k(p-1)(q-1)) - 1 => pq | a^(k(p-1)(q-1)) - 1 即 a^(k(p-1)(q-1)) == 1 mod pq => c == a^(k(p-1)(q-1)+1) == a mod pq 2. 如果 a 是 p 的倍数, 但不是 q 的倍数时, 则 a^(q-1) == 1 mod q (费马小定理) => a^(k(p-1)(q-1)) == 1 mod q => c == a^(k(p-1)(q-1)+1) == a mod q => q | c - a 因 p | a => c == a^(k(p-1)(q-1)+1) == 0 mod p => p | c - a 所以, pq | c - a => c == a mod pq 3. 如果 a 是 q 的倍数, 但不是 p 的倍数时, 证明同上 4. 如果 a 同时是 p 和 q 的倍数时, 则 pq | a => c == a^(k(p-1)(q-1)+1) == 0 mod pq => pq | c - a => c == a mod pq Q.E.D. 这个定理说明 a 经过编码为 b 再经过解码为 c 时, a == c mod n (n = pq).... 但我们在做编码解码时, 限制 0 <= a < n, 0 <= c < n, 所以这就是说 a 等于 c, 所以这个过程确实能做到编码解码的功能.....
㈥ RSA算法的具体过程
具体过程很复杂哦。主要思想是基于大数分解的复杂度:
例如:
你的明文是abc,可用ASCII等方式化成整数串,例如化成117.
选取密钥为129,
开始加密,进行质数计算:117*129=15093。 这个过程很快。
把密文15093公开到网络上。
敌人解密时,只知道15093,想要得到117会花费很长的时间。解密非常控困难。
而你的朋友由于知道密钥129,则可以很快得到明文117.
㈦ 什么是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并不影响解密运算。
㈧ RSA算法详解
总括: 本文详细讲述了RSA算法详解,包括内部使用数学原理以及产生的过程。
相濡以沫。到底需要爱淡如水。
之前写过一篇文章 SSL协议之数据加密过程 ,里面详细讲述了数据加密的过程以及需要的算法。SSL协议很巧妙的利用对称加密和非对称加密两种算法来对数据进行加密。这篇文章主要是针对一种最常见的非对称加密算法——RSA算法进行讲解。其实也就是对私钥和公钥产生的一种方式进行描述。首先先来了解下这个算法的历史:
RSA是1977年由 罗纳德·李维斯特 (Ron Rivest)、 阿迪·萨莫尔 (Adi Shamir)和 伦纳德·阿德曼 (Leonard Adleman)一起提出的。当时他们三人都在 麻省理工学院 工作。RSA就是他们三人姓氏开头字母拼在一起组成的。
但实际上,在1973年,在英国政府通讯总部工作的数学家 克利福德·柯克斯 (Clifford Cocks)在一个内部文件中提出了一个相同的算法,但他的发现被列入机密,一直到1997年才被发表。
所以谁是RSA算法的发明人呢?不好说,就好像贝尔并不是第一个发明电话的人但大家都记住的是贝尔一样,这个地方我们作为旁观者倒不用较真,重要的是这个算法的内容:
RSA算法用到的数学知识特别多,所以在中间介绍这个算法生成私钥和公钥的过程中会穿插一些数学知识。生成步骤如下:
随意选择两个大的质数p和q,p不等于q,计算N=p*q;
什么是质数?我想可能会有一部分人已经忘记了,定义如下:
比如2,3,5,7这些都是质数,9就不是了,因为3*3=9了
r = φ(N) = φ(p)φ(q) = (p-1)(q-1) 。
这里的数学概念就是什么是欧拉函数了,什么是欧拉函数呢?
欧拉函数 的定义:
互质 的定义:
例如: φ(8) = 4 ,因为 1,3,5,7 均和 8 互质。
推导欧拉函数:
(1)如果 n = 1 , φ(1) = 1 ;(小于等于1的正整数中唯一和1互质的数就是1本身);
(2)如果 n 为质数, φ(n) = n - 1 ;因为质数和每一个比它小的数字都互质。比如5,比它小的正整数1,2,3,4都和他互质;
(3) 如果 n 是 a 的 k 次幂,则 φ(n) = φ(a^k) = a^k - a^(k-1) = (a-1)a^(k-1) ;
(4) 若 m , n 互质,则 φ(mn) = φ(m)φ(n)
证明: 设 A , B , C 是跟 m , n , mn 互质的数的集,据 中国剩余定理 (经常看数学典故的童鞋应该了解,剩余定理又叫韩信点兵,也叫孙子定理), A * B 和 C 可建立双射一一对应)的关系。(或者也可以从初等代数角度给出 欧拉函数积性的简单证明 ) 因此的φ(n)值使用 算术基本定理 便知。(来自维基网络)
选择一个小于r并与r互质的整数e,求得e关于r的模反元素,命名为 d ( ed = 1(mod r) 模反元素存在,当且仅当e与r互质), e 我们通常取65537。
模反元素:
比如 3 和 5 互质, 3 关于 5 的模反元素就可能是2,因为 3*2-1=5 可以被5整除。所以很明显模反元素不止一个,2加减5的整数倍都是3关于5的模反元素 {...-3, 2,7,12…} 放在公式里就是 3*2 = 1 (mod 5)
上面所提到的欧拉函数用处实际上在于欧拉定理:
欧拉定理:
欧拉定理就可以用来证明模反元素必然存在。
由模反元素的定义和欧拉定理我们知道, a 的 φ(n) 次方减去1,可以被n整除。比如,3和5互质,而 5 的欧拉函数 φ(5) 等于4,所以 3 的 4 次方 (81) 减去1,可以被 5 整除( 80/5=16 )。
小费马定理:
此时我们的 (N , e) 是公钥, (N, d) 为私钥,爱丽丝会把公钥 (N, e) 传给鲍勃,然后将 (N, d) 自己藏起来。一对公钥和私钥就产生了,然后具体的使用方法呢?请看: SSL协议之数据加密过程详解
我们知道像RSA这种非对称加密算法很安全,那么到底为啥子安全呢?
我们来看看上面这几个过程产生的几个数字:
N 和 e 我们都会公开使用,最为重要的就是私钥中的 d , d 一旦泄露,加密也就失去了意义。那么得到d的过程是如何的呢?如下:
所以得出了在上篇博客说到的结论,非对称加密的原理:
将a和b相乘得出乘积c很容易,但要是想要通过乘积c推导出a和b极难。即对一个大数进行因式分解极难
目前公开破译的位数是768位,实际使用一般是1024位或是2048位,所以理论上特别的安全。
RSA算法的核心就是欧拉定理,根据它我们才能得到私钥,从而保证整个通信的安全。
㈨ 一个RSA算法的加密运算,需要完整的演算过程。
我来回答你可以闭帖了,呵呵
看你题目的意思就是打算把republic这个词按照你的方法装换成数字例如是:X
p=3,q=11
n=p*q=33
t=(p-1)*(q-1)=20
取任何一个数e,要求满足e<t并且e与t互素(就是最大公因数为1)
我们可以取e=7
要求d*e%t==1(D*e除以t取余等于1),我们可以找到D=3
此时我们就有了三个数
n=33
d=3 公钥
e=7 私钥
设消息为数M (M <n)
设c=(M**d)%n就得到了加密后的消息c
设m=(c**e)%n则 m == M,从而完成对c的解密。
注:**表示次方,上面两式中的d和e可以互换。
我们可以对republic词按照你的方法装换成数字:X一位一位的加密。
加入X的第一位是6(别的同理)
则:M = 6
加密时:(c为加密后的数字)
c=(M**d)%n=(6^3)%33=216%33=18(商6余18),则6加密后就是18了
解密时:
设m=(c**e)%n则 m == M,
(18^7)%33=612220032%33=6(商18552122余6)
到此加密解密完成。
至于怎么把republic装换成X,把X装分成多少部分进行分批加密,你可以自己决定。但是加密的数字M 需要小于n
如果需要给你写个程序,留个Email,我空的时候写个发给你。
我个人给你个方法,因为n=33 >26(26个英文字母),所以可以把republic分成一个字母一个字母的加密。
按你的分发 REP 就分成数字
18 05 16
加密
(18^3)%33=5832%33= 24
(05^3)%33=125%33= 26
(16^3)%33=%33= 4
所以加密后就是
24 26 04 转换成字母就是 XZD
解密
(24^7)%33=4586471424%33=18
(26^7)%33=8031810176%33=05
(4^7)%33=16384%33=16
又变成 18 05 16 转换成字母就是 REP
是不是很简单啊~~
我如果不懂。空间里面有片文章,你可以看看,就知道我上面讲的那些是什么意思了。
RSA算法举例说明
http://hi..com/lsgo/blog/item/5fd0da24d495666834a80fb8.html