参考文章
https://blog.csdn.net/bian_h_f612701198412/article/details/79358771
https://blog.csdn.net/u013073067/article/details/86674474
什么是“素数”?
素数是只能表示它自己和1的乘积,不能表示为任何其它两个整数的乘积。13除了等于13*1以外,不能表示为其它任何两个整数的乘积,所以13是一个素数。素数也称为“质数”。
什么是“互质数”(或“互素数”)?
公约数只有1的两个数,叫做互质数。
(1)两个质数一定是互质数。例如,2与7、13与19。
(2)一个质数如果不能整除另一个合数,这两个数为互质数。例如,3与10。
(3)1不是质数也不是合数,它和任何一个自然数在一起都是互质数。如1和9908。
(4)相邻的两个自然数是互质数。如 15与 16。
(5)相邻的两个奇数是互质数。如 49与 51。
(6)大数是质数的两个数是互质数。如97与88。
什么是模指数运算?
模运算是整数运算,有一个整数m,以n为模做模运算,即m mod n。怎样做呢?让m去被n整除,只取所得的余数作为结果,就叫做模运算。例如,10 mod 3=1;26 mod 6=2等等。
模指数运算就是先做指数运算,取其结果再做模运算。如(5^3) mod 7 = (125 mod 7) = 6。
什么是RSA加密算法?
RSA加密算法的安全性是基于对极大整数做因数分解的困难。
RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥,使用其中一个加密,则需要用另一个才能解密。例如:
(1)乙方生成两把密钥(公钥和私钥)。公钥是公开的,任何人都可以获得,私钥则是保密的。
(2)甲方获取乙方的公钥,然后用它对信息加密。
(3)乙方得到加密后的信息,用私钥解密公钥加密的信息只有私钥解得开,那么只要私钥不泄漏,通信就是安全的。
密钥生成过程
1、 找两个质数 P 和 Q ;
2、 计算他们的乘积 n = P * Q
3、 计算 n 的欧拉函数 φ(n):φ(n) = φ(P * Q) = (P - 1)(Q - 1)
4、 选择一个整数 e,条件是 1< e < φ(n),且 e 与 φ(n) 互质
5、 计算e对于 φ(n) 的模反元素d,可以使得 e * d 除以 φ(n) 的余数为 1
( 1<d<e,且e*d mod φ(n) = 1 ) 即:d=e^-1 ( mod φ(n) )
6、 公钥(n,e);私钥(n,d);
加解密过程
c:密文
m:明文
N:两个质数的乘积
e: 公钥
D: 私钥
公钥与私钥关系: e*d mod φ(n) = 1
加密:c = m^e mod N
解密:m = c^d mod N
例题
例1:在RSA加密体制中, 已知素数 p = 7, q = 11, 公钥 e = 13, 试计算私钥 d 并给出对明文 m = 5 的加密,求其密文. 已知密文 c = 15, 求其明文
n=pq=77
φ(n)=(p-1)(q-1)=60
e*d mod φ(n) = 1
即13d mod 60 = 1
解得:d = 37
公钥(n,e)=(77,13)
密文c = m^e mod n = 5^13 mod 77 = 26
私钥(n,d)=(77,37)
明文m = c^d mod n = 15^37 mod 77 = 71
例2:在一个RSA系统中,一个给定用户的公开秘钥是e=31,n=3599.求这个用户的私有秘钥.
n=59*61
φ(n) =58*60=3480
由公式得e*d mod φ(n) = 1
即31*d mod 3480=1
解得d=3031
例3:使用RSA公钥系统中如果截取了发送给其他用户的密文c=10,若此用户的公钥为e=5,N=35,请问明文的内容是什么?
由题易知,两个质数分别为5和7
所以欧拉函数为φ(N)=(5-1)*(7-1)=24
由公式e*d mod φ(N) = 1
5*d mod 24=1,所以d为5
由公式: m = c^d mod N
m=10^5 mod 35=5
所以密文内容为5