RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。
在公开密钥密码体制中,加密密钥(即公开密钥)PK是公开信息,而解密密钥(即秘密密钥)SK是需要保密的。加密算法E和解密算法D也都是公开的。虽然秘密密钥SK是由公开密钥PK决定的,但却不能根据PK计算出SK。
准备工作:
1.选择两个质数p, q
2.令N = pq, e 为 与(p-1)(q-1)互质的数 (为了快速解密,若符合条件一般选择最小的3) (N, e)为公钥
3.令d为e mod (p-1)(q-1)的逆。(N,d)为私钥
现在就得到3个数,N e d。
设x为信息
加密:密文为 y = x^e (mod N)
解密:x = y^d (mod N)
Example:
取p = 11, q = 5, 所以(p-1)(q-1) = 40
N = pq = 55, gcd(3, 40) = 1, e = 3
d = 3^-1 mod 40 = 27
所以
加密 y = x^3 mod 55
解密 x = y^27 mod 55
RSA安全性在于,若不知道d,知道了y要解出x是很困难的。
来源:https://www.cnblogs.com/chenyg32/archive/2013/04/13/3017806.html