每天一题,只能多不能少
RSA-公约数
题目分析
- 公约数
- 寻找素数结果
开始
1.题目
#!/usr/bin/python
#encoding=utf-8
import gmpy2
from libnum import n2s,s2n
from Crypto.Util.number import getPrime
e = 0x10001
flag = 'flag{******}'
m = s2n(flag)
p = []
f = open('output.txt','w')
for i in xrange(5):
p.append(getPrime(512))
for i in xrange(5):
for j in xrange(i+1,5):
n = p[i]*p[j]
f.write(str(pow(m,e,n))+'\n')
2.分析
加密过程一目了然。先生成5个素数,然后两两相乘得到10个n。用这10个n分别去rsa加密m得到10个c。给出了这10个c。
(1)原理
∵ c 1 = m e m o d n 1 = m e m o d ( p 1 ∗ p 2 ) ∴ c 1 = m e + s 1 ∗ p 1 ∗ p 2 \because c1 = m^e mod \quad n1=m^emod\quad(p1*p2) \\ \therefore c1 = m^e + s1*p1*p2 ∵c1=memodn1=memod(p1∗p2)∴c1=me+s1∗p1∗p2
由此可得
c 2 = m e + s 2 ∗ p 1 ∗ p 3 c 3 = m e + s 3 ∗ p 1 ∗ p 4 c 4 = m e + s 4 ∗ p 1 ∗ p 5 c 5 = m e + s 5 ∗ p 2 ∗ p 3 c 6 = m e + s 6 ∗ p 2 ∗ p 4 c 7 = m e + s