RSA算法,自己的理解!

昨晚看书的时候,看到了RSA的算法,不是很懂,所以今天早上就早早起来看了关于RSA的书。搞了好久才弄得明白!

RSA算法的描述:
1.选取足够大的两个素数p和q,令n=p*q,则t=(p-1)*(q-1),这里的t用到的是欧拉定理来算的。
2.选取适当的加密密钥e和解密密钥d,使得其满足e*d≡ 1(mod t)
3.公开的密钥是n和e,p、d和q要保密。
4.加密运算:E(x)  = x^e mod n
5.解密运算:D(y) =y^d mod n

算法的介绍就是上面的这些。但是我不明白d是如何确定的。最后我从Google中找到了答案。那就是用欧几里德算法的扩展,用乘法逆元来求得d,首 先我们应该懂得的几个知识点:欧几里徳算法是求得两个整数的最大公因子:**(a,d)=**(b,a mod b),这个式子是成立的。也就是说a,b的最大公因子是和b,a mod b的最大公因子一样。例如:9和6的最大公因子是3,那么9和3的最大公因子也是3.

同余式:设n是一个正整数,a,b属于z,如果a mod n = b mod n,则称a,b模n同余,记作:a≡b(mod n)。

乘法逆元:设a,如果存在x,满足x*a≡1(mod) n,则x是a的模n乘法逆元。

现在我们来看一个例子:素数47和59,所以n=47*59=2773;t=46*58=2668;现在我们取e=63;现在我们来算一下d;因为e*d≡ 1(mod t),所以可以用乘法逆元求解:2668=42*63+22
63     = 2*22+19
22    = 1*19+3
19    = 6*3+1

则:1=19-(6*3)
=19-(6*(22-19))
=7*19-6*22
=7*(63-2*22)-6*22
=7*63-20*22
=7*63-20(2668-42*63)
=847*63-20*2668
由上可知d=847;最终我们获得了e=63;d=847;n=2773;

我们对2进行加密:2^63%2773=976;然后解密:976^847/2773=2和我们原来的一样。

 

就写到这里吧,下回研究怎么用代码实现!!

你可能感兴趣的:(加密,算法,Google,解密,扩展)