RSA算法是由Rivest, Shamir 和 Adleman 在1978年公开提出的一种公钥密码算法。
一般地,公钥密码算法的安全性都是建立在一些数学难题之上。
目前常用的公钥密码算法主要有两大类:一是基于大整数银子分解问题,如RSA算法;
一是基于离散对数问题,如ElGamal算法、椭圆曲线密码算法、Diffie-Hellman密钥交换协议等。
RSA算法如下:
找两个随机大素数p、q,n=pq,t=(p-1)(q-1);选择随机数e,满足e和t互质,然后计算d=e-1modt,公开(n,e)作为公钥,(n,d)保留作为私钥。
其中d=e-1 mod t比较费解,这牵涉到一些关于数论的知识。在数论中,如果x与y的积除以z得到的余数为1,即x*y mod z=1,则称x和y对模z来说互为逆元,这种逆元关系用符号表示即为
x=y-1 mod z,所以这里的y-1并不是代表y的倒数。
RSA加密:RSA算法将待加密的字符串s看作是大整数,若s>n,将s表成a进位,a<n,一般取a=2t,然后把s分段,每段表示的整数值都小于n,然后对每段进行加密,运算如下
假设明文为P,加密后的密文C=Pe mod n;
RSA解密:解密过程与加密类似,密文为C,则明文P=Cd mod n;
关于RSA算法的证明牵涉到一些数学知识,可以参看博客
http://blog.sina.com.cn/s/blog_621417860100en8h.html