关于RSA涉及到的一些数学知识(提及简单的概念和定义):
(无奈不会在博客中写公式,只好放截图了)
1.互质关系:
如果两个正整数,除了1以外,没有其他公因子,我们就称这两个数是互质关系。
2.欧拉函数:
任意给定正整数n,在小于等于n的正整数中有多少个与n构成互质关系的数,计算这个值的方法就叫做欧拉函数 。以下是欧拉函数的通式:
在RSA计算中用到了两个推论:
(1)如果n可以分解为两个互质的整数的积,即n = p q,则有:
(2)如果n为质数,则
3.同余:
两个整数a、b,若它们除以整数m所得的余数相等,则称a与b对于模m同余。记作:
4.欧拉定理:
欧拉定理是一个关于同余的性质,若n、a为正整数,且n、a互质,则有:
也就是说,a的 (n)次方被n除的余数为1。
5.模反元素:
如果两个正整数a和n互质,那么一定可以找到整数b,使得 ab-1 被n整除,或者说ab被n除的余数是1。而且也可以看出模反元素不止一个。
熟悉了上面的这些概念,我们接下来就可以看一下RSA算法的实现过程:
(在此申明,下面的算法流程是参考了阮一峰先生的博客,关于博主介绍的RSA算法真的很详细,而且简单易懂,在此表示感谢!)
据说密码学中举例经常会用到Alice和Bob这两个人,哈哈,我们就以这两个人举例:
1.假设Alice要和Bob进行通信,首先Alice会随机选择两个不同的质数
p=31和q=37
2.计算p和q的乘积n
n= p x q = 31 x 37 = 1147
n的长度就是密钥的长度,1147写成二进制位10001111011,一共11为,所以这个密钥就是11位,一般我们使用的RSA密钥为1024位。
3.计算n的欧拉函数
这时根据我们上面介绍欧拉函数的两个推论可以变换计算公式如下:
4.随机选择一个整数e
假设Alice选择的e值为67
5.计算e对于 的模反元素d 即
将我们的值代入,并将这个式子转化一下:67d - 1080k = 1 (k为整数)
我们可以计算出一组值:k= 25 d = 403 (计算的方式就不多说了,我是用程序跑出来的)。
6.将n、e封装成公钥,n、d封装成私钥
最终我们计算得到:n=1147,e=67,d=403所以公钥就是(1147,67),私钥就是(1147,403)
7.数据加解密操作
有了公钥和私钥,就可以发数据了,假设Bob要向Alice发送需要加密的信息m,这时就用公钥对m进行加密。(这里的m必须是整数,并且必须小于n,字符串可以取ascii值或unicode值)。
至此,整个加解密的过程执行完毕。