RSA加密解密详解

阅读量324059

发布时间 : 2022-07-05 10:30:09

 

0x01 RSA概要

RSA算法是非对称密码算法。非对称密码又称为公钥密码,意思为每对加密包含一个公钥(可能为他人所知)和一个私钥(可能不为所有人所知)。有效的安全需要保持私钥的私密性;公钥可以在不影响安全性的情况下公开分发。

RSA 的安全性依赖于分解两个大素数乘积的实际困难,但相对较慢,可以称为“分解问题”。

RSA应用

  1. 客户端将其公钥发送到服务器并请求一些数据
  2. 服务器使用客户端的公钥加密数据并发送加密数据
  3. 客户端接收此数据并对其进行解密

 

0x02 RSA算法详细流程

RSA算法四个步骤

  1. 密钥生成
  2. 密钥分发
  3. 加密
  4. 解密

关于RSA相关公式

n = p * q
(n) = (p – 1) * (q – 1)
ed 1 mod (n)
c = m**e mod n
m = c**d mod n

simple example

已知:P = 11,q = 29,e = 3

求d

通过公式:
(n) = (p – 1) * (q – 1)

(n) = (p-1)(q-1) = (11-1)*(29-1) = 280

通过公式:
ed 1 mod (n)
如果两个整数 ed 和 1 满足 ed-1 能被 (n) 整除,称为整数 ed 与 1 对模 (n) 同余
1 < d < (n)

3d 1 mod 280

3d mod 280 = 1

d = 187

通过公式:
n = p * q

n = 11 * 29 = 319

公钥(n,e)
私钥(n,d)
得到:
公钥(319,3)
私钥(319,187)

或者用脚本解d:

gmpy2.invert(e,(p-1)*(q-1))

使用此密钥对可以加密的最大数字是多少

加密函数为:
c(m) = m^e mod n
解密函数为:
m(c) = c^d mod n

RSA算法一次能加密的名文长度与密钥长度成正比。

len_in_byte(raw_data) = len_in_bit(key)/8-11

如果小于这个长度,就需要进行数据补齐,称为padding,不进行数据补齐用户就无法确分解密后内容的真实长度。

n的长度就是密钥长度,n = 319,n的二进制为100111111,密钥为9位,RSA实际可加密的明文长度最大也是1024bits

当加密明文m = 23时,求密文c

加密函数为:
c(m) = m^e mod n

c(m) = 23^3 mod 319 = 12167 mod 319

c(m) = 45

import gmpy2
n = 319
e = 3
m = 23
print(pow(m, e, n))

当密文c = 23时,求明文m

解密函数为:
m(c) = c^d mod n

m(c) = 23^187 mod 319

m(c) = 199

import gmpy2
n = 319
d = 187
c = 23
print(pow(c,d,n))

本文由Tide安全团队原创发布

转载,请参考转载声明,注明出处: https://www.anquanke.com/post/id/275389

安全客 - 有思想的安全新媒体

分享到:微信
+10赞
收藏
Tide安全团队
分享到:微信

发表评论

Tide安全团队

Tide安全团队正式成立于2019年1月,是新潮信息旗下以互联网攻防技术研究为目标的安全团队,目前聚集了十多位专业的安全攻防技术研究人员,专注于网络攻防、Web安全、移动终端、安全开发、IoT/物联网/工控安全等方向。

  • 文章
  • 83
  • 粉丝
  • 71

热门推荐

内容需知
合作单位
  • 安全客
  • 安全客
Copyright © 北京奇虎科技有限公司 三六零数字安全科技集团有限公司 安全客 All Rights Reserved 京ICP备08010314号-66