RSA加密算法

Posted -wenli

tags:

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

 

对称加密与非对称加密

对称加密:加密和解密都是用同一个密钥的算法,称作对称加密。

技术图片

非对称加密:加密和解密需要不同的密钥。

技术图片

 

 

 

什么是RSA

RSA是一种非对称加密算法,它的名字由三位开发者,即Ron Rivest、Adi Shamir和Leonard Adleman的姓氏的首字母组成的。

RSA被用于公钥密码和数字签名。

1983年,RSA公司为RSA算法在美国取得了专利,但现在该专利已经过期。

RSA加密与解密介绍

在RSA中,明文、密钥和密文都是数字。
RSA加密
RSA的加密过程可以用下面的公式来表达:

技术图片

RSA的密文是对代表了明文的数字的E次方求mod N的结果。就是将明文和自己做E次乘方,然后将其结果除以N求余数,这个余数就是密文。
E和N两个数字对RSA的加密结果起着决定性作用。
E和N两个数才组成一个公钥,因此我们一般会写出“公钥是(E,N)”或者“公钥是{E,N}”这样的形式

RSA解密

RSA的解密过程可以用下面的公式来表达:

技术图片

该公式表示对密文的数字的D次方求mod N就可以得到明文。就是将密文自己做D次乘法,再对其结果除以N求余数,就可以得到明文。
D和N两个数字也对解密结果起着决定性机会,这里的N和RSA加密的N是同一个数字。
D和N两个数组成了一个私钥,因此我们一般会写出“私钥是(D,N)”或者“私钥是{D,N}”这样的形式

所以到这里我们似乎只要知道怎么产生公钥(E,N)和私钥(D,N)。

 

RSA加密与解密详细

数学知识准备

RSA加密与解密算法中,只用到素数、互质数、指数运算、模运算等几个简单的数学知识。所以,我们也需要了解这几个概念即可。

素数

素数又称质数,指在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数整除的数。

互质数

百度百科上的解释是:公因数只有1的两个数,叫做互质数。;维基百科上的解释是:互质,又称互素。若N个整数的最大公因子是1,则称这N个整数互质。

常见的互质数判断方法主要有以下几种:

  • 两个不同的质数一定是互质数。例如,2与7、13与19。
  • 一个质数,另一个不为它的倍数,这两个数为互质数。例如,3与10、5与 26。
  • 相邻的两个自然数是互质数。如 15与 16。
  • 相邻的两个奇数是互质数。如 49与 51。
  • 较大数是质数的两个数是互质数。如97与88。
  • 小数是质数,大数不是小数的倍数的两个数是互质数。例如 7和 16。
  • 2和任何奇数是互质数。例如2和87。
  • 1不是质数也不是合数,它和任何一个自然数在一起都是互质数。如1和9908。
  • 辗转相除法。

指数运算

指数运算又称乘方计算,计算结果称为幂。nm指将n自乘m次。把nm看作乘方的结果,叫做”n的m次幂”或”n的m次方”。其中,n称为“底数”,m称为“指数”。

模运算

模运算即求余运算。“模”是“Mod”的音译。和模运算紧密相关的一个概念是“同余”。数学上,当两个整数除以同一个整数,若得相同余数,则二整数同余

两个整数a,b,若它们除以正整数m所得的余数相等,则称a,b对于模m同余,记作: a ≡ b (mod m);读作:a同余于bm,或者,ab关于模m同余。例如:26 ≡ 14 (mod 12)。

加密和解密

使用Alice和他的小伙伴来举例子。

假设Alice想通过一个不可靠的媒体接受Bob的一条私人消息,他可以用下面的方式产生一个公钥和私钥。

  • 1. 随意选择两个大的质数p和q,p不等于q,计算N = pq.
  • 2. 根据欧拉函数,求得r=φ(N)=φ(p)φ(q)=(p-1)(q-1)。
  • 3. 选择一个小于r的整数e,是e与r互质。并求得e关于r的模反元素,命名为d。(求d令ed≡1(mod r))。(模反元素存在,当且仅当e与r互质)
  • 4. 将p和q的记录销毁。

其中(N,e)是公钥,(N,d)是私钥。

举个例子:

  • 1. Alice随机选两个不相等的质数61和53,并计算两数的积N=61*53=3233,N的长度就是密钥长度。3233的二进制是110010100001,一共12位,所以这个密钥就是12位。实际应用中,RSA密钥一般是1024位,总要的场合是2048位。
  • 2. 计算N的欧拉函数。 φ(N)=(p-1)(q-1)=60*52=3120.
  • 3. Alice 在1到3120上随机选择了一个随机数e=17。
  • 4. 计算e对φ(N)的模反元素d,即时,ed-1=kφ(N)。
  • 即使求解:17x+3120y=1.用扩展欧几里得算法求解。可以算出一组解(x,y)=(2753,-15),即d=2753。

至此完成计算。

其中N=3233,e=17,d=2753。所以公钥就是(N,e)=(3233,17),私钥(N,d)=(3233,2753)。实际应用中公钥和私钥都是采用ASN.1格式表达的。

加密

加密要用到公钥(N,e)。

假设Bob要向Alice发送加密信息m,他就要用Alice的公钥(N,e)对m进行加密。但m必须是整数(字符串可以取ascii值或unicode值),且m必须小于n。

所谓加密就是计算下式的c。

m^e ≡ c (mod n)

假设m=65,Alice的公钥(3233,17),所以等式如下:

65^17≡2790(mod 3233)

所以c等于2790,Bob就把2790发给Alice。

解密

Alice收到Bob发来的2790后,就用自己的私钥(3233,2755)进行解密。

 c^d ≡ m (mod n)

也就是c的d次方除以n的余数就是m。

2790^2753 ≡ 65 (mod 3233)

因此得到原文65。

 

 

refer:

https://blog.csdn.net/chengqiuming/article/details/82725137

https://www.jianshu.com/p/48ceec5e0124

http://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html

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

PHP RSA和RSA2加密算法代码

求RSA加密解密算法,c++源代码

非对称加密及RSA加密算法

RSA 加密算法在C++中的实现 面向初学者(附代码)

jmeter接口测试-使用rsa加密解密算法

5_RSA加密算法