RSA非对称加密算法简单说明

Posted 技术的秩

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RSA非对称加密算法简单说明相关的知识,希望对你有一定的参考价值。


RSA加密算法是一种非对称算法(此处省略好几千字),本文通过一个简单的举例说明RSA非对称算法的过程和原理。

首先,取一对互质的数p、q,比如p = 61,q = 53。 
然后,要把大象放冰箱,分三步^_^: 

1. 求n(模值)和[欧拉n]
要求:n是p和q的积,[欧拉n]就是p和q各减1后的乘积(这一步没啥难度)
n = p * q = 61 * 53 = 3233
[欧拉n] = (p-1) * (q-1) = 60 * 52 = 3120
 
2.求e(公钥指数):
要求 :1 < e < [欧拉n],且e和[欧拉n]互质; 
这样的数有很多,比如17;(真正的算法中,这一步会做技术性处理
e = 17 

3.求d(私钥指数):
要求:e * d % [欧拉n] = 1 
这个问题可以变作一个方程:x*e+[欧拉n]*y=1 (用[欧拉n]模左边第二项为0,右边为1,这样就必须要求x*e模[欧拉n]为1) ,解方程:17x + 3120y = 1;
算出x = 2753,y = -15(其实我们只要x就行,x是我们要的d) 。
验证: 7 * 2753 % 3120 = 1,所以:d = 2753 


这样,得到以下的数据:p = 61,q = 53,n = 3233,e = 17,d = 2753 
公钥为: n和e (3233,17) (模值+公钥指数
私钥为: n和d (3233,2753) (模值+私钥指数)——大多数工具生成的私钥是包含p、q

最后,是加解密算法(也不叫解密,其实都是一个算法,明白啥意思就行):

公钥加密: data**e%n,data是数据,e是公钥指数,n是模值;

私钥解密: data**d%n,data是数据,d是私钥指数,n是模值;


收工,就这么简单^_^。



后记:
1. 举例
用公钥加密123:123 ** e % n = 123 ** 17 % 3233 = 855
用私钥解密855:855 ** d % n = 855 ** 2753 % 3233 = 123 

用私钥加密99:99 ** d % n = 99 ** 2753 % 3233 = 89
用公钥解密89:89 ** e % n = 89 ** 17 % 3233 = 99

2. 关于破解
如果p和q位数小,这里是6bit,那么破解也不是什么困难的事情;但如果p和q的位数很大,比如1024,破解就需要很长很长时间。

3. 公钥指数
公钥指数是随机选择的,目前行业上公钥指数普遍选的都是65537(0x10001)(对于固定密钥长度的RSA算法,如果把公钥指数选小点,那对应的私钥指数肯定很大。这样做的意图很明确,大家都要用公钥加密,大家时间很宝贵,需要快一点;您一个人私钥解密,时间长一点就多担待,少数服从多数的典型应用。^_^)

4. 密钥长度
RSA非对称加密算法本身要求加密内容也就是明文长度m必须0<m<n,也就是说内容这个大整数不能超过n,否则就出错。那么如果m=0是什么结果?
一般RSA加密算法会直接返回全0结果,也有些使用到padding,只要用到padding,那么就要占用实际的明文长度。
一般使用的padding标准有NoPPadding、OAEPPadding、PKCS1Padding等,其中PKCS#1建议的padding就占用了11个字节,于是才有117字节的说法(密钥长度1024)。


Over.

以上是关于RSA非对称加密算法简单说明的主要内容,如果未能解决你的问题,请参考以下文章

非对称加密算法-RSA算法

加密算法之非对称加密RSA

Java 加密解密 对称加密算法 非对称加密算法 MD5 BASE64 AES RSA

非对称加密算法——RSA加密原理及数学推导

openssl 非对称加密算法RSA命令详解

Python使用rsa模块实现非对称加密与解密