所谓非对称加密算法就是加密和解密采用不同的密钥,加密时用公钥,解密时用私钥。而在当今互联网世界,使用最广泛的非对称加密算法非 RSA 莫属,我们熟知的支付宝、微信支付等支付工具、HTTPS 协议等无一不在使用 RSA。
RSA算法之所以被广泛使用,究其原因就在于它的极高的安全性,在提升安全性的情况下,它的性能就相对于对称加密算法如 AES要差很多。因此,它适用于一些对安全性要求较高的功能。
RSA 底层原理
公钥和私钥的产生
根据 RSA 算法原理,其公钥和私钥产生的步骤如下:
随机选择两个不同的大质数 p 和 q,计算 n=p*q。(这里的大质数要足够大,大到无法想象)
根据欧拉函数,计算 φ = (p - 1) * (q - 1)。
选择一个小于φ的整数 e,使得 e 和φ互质(即 e 和φ的公约数为 1),并求出 e 关于φ的模反元素 d,(ed - 1) mod φ = 0(所谓模反元素,其概念是如果两个正整数 a 和 n 互质,那么一定可以找到整数 b,使得 ab - 1 被 n 整除)。
销毁 p 和 q。
此时,公钥为(n,e),私钥为(n,d)。
RSA 的数学知识
欧拉函数
欧拉函数是这样定义的,它是小于或等于 n 的正整数中与 n 互质的数的数目φ (n),如 n=9,小于等于 9 的正整数中,可与之互质的数有 1、2、4、5、7、8,因而φ (n)=6。
RSA 算法中,利用了素数的分解,因而关于欧拉函数,我们只需要考虑 n 为质数的情形,如 n=7。由于质数与小于它的所有正整数都构成互质关系,因此φ (n) = n-1。在上述公钥和私钥产生的第二步,φ =(p - 1)* (q - 1),它就是由两个欧拉函数值乘积构成。
欧几里得算法
欧几里得算法就是用于求两个正整数的最大公约数(如果最大公约数为 1 则两数互质)的算法,又叫辗转相除法。
最大公约就是由上一步的除数除以余数,一直计算下去,直到余数为 0 结束,其最大公约数就是最后一个算式的除数。因此,利用欧几里得算法可以轻松找到两个互质的正整数。
欧几里得算法的编程语言实现:
Python 具体代码如下:
def gcd(a,b):
if a % b == 0:
return b
r