Fetching...

-

Just a minute...

rsa的基本原理

公钥(n,e) 私钥(n,d)

其中,n是两个质数p,q的积,e是随机整数满足1<e<m且e与m互质,d满足(e*d)%m = 1.

代码

已知p,q,n,e

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
def computeD(fn, e):
(x, y, r) = extendedGCD(fn, e)
# y maybe < 0, so convert it
if y < 0:
return fn + y
return y


def extendedGCD(a, b):
# a*xi + b*yi = ri
if b == 0:
return (1, 0, a)
# a*x1 + b*y1 = a
x1 = 1
y1 = 0
# a*x2 + b*y2 = b
x2 = 0
y2 = 1
while b != 0:
q = a / b
# ri = r(i-2) % r(i-1)
r = a % b
a = b
b = r
# xi = x(i-2) - q*x(i-1)
x = x1 - q * x2
x1 = x2
x2 = x
# yi = y(i-2) - q*y(i-1)
y = y1 - q * y2
y1 = y2
y2 = y
return (x1, y1, a)

fn = (p - 1) * (q - 1)

d = computeD(fn, e)
m = pow(c,d,n)
print m

dp泄露

1
2
3
4
5
6
7
8
9
for i in range(1, e):
if (dp*e-1) % i == 0:
p = (dp*e-1)//i + 1
if n % p == 0:
q = n // p
d = gmpy2.invert(e, (p-1)*(q-1))
m = pow(c, d, n)
print(libnum.n2s(m))
exit()
Related post
Comment
Share
  • Leetcode1:两数相加

    题目给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。 代码12345678910cl...

    Leetcode1:两数相加
  • 基于hexo+github搭建博客

    一、准备工作1.node用来生成静态页面,去官网下载一个就好了 2.git把本地的hexo内容提交到github上去 一是安装homebrew,然后通过homebrew安装Git,具体方法请参考homebrew的文档:http://b...

    基于hexo+github搭建博客
  • easy-apk

    1.下载jadx-gui在terminal中执行下面语句 1234mkdir jadx #创建 jadx目录git clone https://github.com/skylot/jadx.git #将存储库克隆到目录cd jadx...

    easy-apk
Please check the parameter of comment in config.yml of hexo-theme-Annie!