RSA加密与解密

1. 说明

本人并不是相关专业的学生和从业人员,只是对RSA感兴趣,并将自己的想法整理成文,与大家分享。

若有任何不妥或者错误的地方,欢迎大家能及时指出,也欢迎大家共同交流。

网上关于RSA加密的文章很多,具体原理就不细说了。

本文主要讲解RSA加密与解密的步骤,并用一个简单的例子举例说明,希望能够帮助读者快速理解RSA加密算法。

2. 简介

RSA的密钥分为公钥私钥

公钥即为公布于众的密钥;私钥为自己保存的密钥。

RSA密钥主要用两种用途:加密解密签名

在加密解密时,公钥加密、私钥解密;在签名时,私钥加密、公钥验签。(详见文章**[1]**)

加密是为了防止信息泄露;签名是防止信息被篡改。

3.RSA密钥计算

RSA的公钥为(N,e);私钥为(N,d)。

接下来就来看看密钥是怎么而计算出来的吧。

3.1 RSA计算步骤:

1. 首先选择两个素数 p 和 q,计算 N=p*q。
	一般来说,目前两个数的长度都接近512位是安全的。
	
2. 计算 Φ(N)=(p-1)*(p-1),其中Φ(N)为N的欧拉函数。
	为方便,用r表示Φ(N)的具体数值。(两素数乘积的欧拉函数等于两数分别减一后的乘积).
	
3. 选取一个正整数e,需要满足以下两点:
	a. 1 < e < r
	b. e和r最大公约数为1
	
4. 求d:d*e=1 (mod r)	
	上式表示的是d*e,再取模r运算,结果为1;更简单的说,d*e除以r余1,商是多少不重要。	
	
5. 记录公钥(N,e),私钥(N,d);并销毁 p 和 q 。

此时,就已经完成了公钥和私钥的生成:公钥为(N,e);私钥为(N,d)。

这时,便可以将p和q销毁(绝对不能让其他人知道)。

公钥可以公布与众,而私钥需要自己保留,不能让他人知道。

举例

本例参考文章[3]。

1. 我们按照要求取 p=43,q=59;则 N=p*q=2537;
2. r=Φ(N)=(p-1)(q-1)=2436;
3. e选择13
4. 根据公式d*e=1 (mod r),计算出d=937。(当然,3373、5809也都是d的解,为计算方便,选取较小的937)
5. 此时,变完成了密钥的产生:公钥为(2537,13);私钥为(2537,937)。

参考文章[3],

3.2 RSA加密步骤

假设,待加密的信息码为 m,加密后的码为 c,解密后的码为 n,即:

\begin{equation}
m --加密–> c --解密–> n
\end{equation}

如果密钥正确,加密解密过程正确,则应该 m 和 n 是相同的。

1. m 为带加密的信息码;若 m 太长则需要对 m 分组,要求每组数都要小于 N。
	例如:假设,N=55,m=3412;则m需要分组,m1=34,m2=12。m1、m2均小于N。详见文章[3]
	
2. 根据公式 m^e=c(mod N),求解c
	上式表示的是m的e次方,再取模N运算,结果为1;更简单的说,d*e除以r余1,商是多少不重要。
	
3. c就是加密后的信息,可以发送给拥有私钥的人。

举例

本例参考文章[3]。

假设我们传输的信息为“secret”,并对其编码。

假设编码规则:

a为00,b为01,c为02,以此类推,y为24,z为25。

故,“secret”编码后为:180402170419。

1. m=180402170419过长,需要对m进行分组,要求每个分组对应的十进制数小于N。
	N=2537,按照编码,最大的两位字母组合‘zz’的编码为2525,小于N,则可以按照每两个字母分组。
	即,分组后为:m1=1804,m2=0217,m3=0419。
	
2. 计算c:c1=2343,c2=0710,c3=2017。

3. c=[c1 c2 c3]=234307102017,便可以将加密后的信息发给接收方。

3.3 RSA解密步骤

1. n为待解密的信息
2. 根据公式 c^d=n(mod N),求解n
3. n就是解密后的信息

举例

本例参考文章[3]。

接收加密后的信息为:c=234307102017。

1. 将c拆分:c1=2343,c2=0710,c3=2017;
2. 计算n:n1=1804,n2=0217,n3=0419;
3. 则n=180402170419,译码后便可以得到真正的信息“secret”。

参考文献

[1]https://www.cnblogs.com/pcheng/p/9629621.html

[2]https://www.jianshu.com/p/48ceec5e0124

[3]https://jingyan.baidu.com/article/597a0643210228312b524319.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值