RSA加密算法是由罗纳德·李维斯特(Ronald Linn Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德尔曼(Leonard Adleman)于1977年共同发明的。它的密钥计算规则可由下图所示。
公钥和私钥的基本特点为:
公钥加密的过程为(对明文中的每个字符分别解密,示例为加密其中一个字符):
私钥解密的过程与加密过程类似:
上面介绍了RSA加密解密的基本过程,那RSA的密钥(公钥和私钥),怎么计算得到呢?
RSA的密钥计算,需要用到质数和欧拉函数的知识。
质数的概念如果忘了,后面会再介绍。
欧拉函数暂不展开讲解,记住公式即可。
下面就来看下RSA密钥的计算步骤。
RSA密钥(公钥和私钥)的计算步骤可分为如下五步:
RSA密钥的计算规则是公开的,那破译的难点在哪里呢?
其实,在实际使用时,两个质数尽量取大,转换成二进制后1024个二进制位或者更多,位数越多越难破解。
对于RSA的破解难度分析:
上面说到,RSA密钥的计算,需要用的质数,那质数的概念,是否还熟悉呢?
质数是小学数学中就学过的知识点,不过平时用的不多,这里再简单回顾以下。
质数(也叫素数),指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
质数的一些性质:
可以写一段代码,求取一定范围的质数,感受一下质数有哪些。
代码怎么写呢?还是可以看下小学课本:
用Python编写的打印5000以内质数的代码如下:
#判断是否是质数:大于1,不等于2,是否为奇数,是否有约数'''
def isPrime(num):
if num > 1:
if num>2:
if num%2==1:
for i in range(2, int((num-1)/2)):
if num%i == 0:
return False #有约数
return True #无约数
return False #3以上的偶数
return True #等于2
return False #小于2
if __name__ == '__main__':
prime_list = []
for i in range(5000):
if isPrime(i):
prime_list.append(i)
print(prime_list)
这里列举5000以内的质数:
题目:RSA算法中,选择两个质数,p=11,q=17,加密密钥为e=23,且求解密密钥。
分析:按照RSA算法的基本原理,N=pxq=11x17=187,T=(p-1)x(q-1)=10x16=160,而E=23,
根据(DxE)%T=1,即(Dx23)%160=1,解得D=7
本篇介绍了RSA这种非对称加密算法的加密解密基本过程,以及公钥和私钥的计算基本步骤,并补充介绍了质数的相关概念,最后通过一个实例来简单体会下RSA密钥的计算。