0x01 题目

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import libnum
from Crypto.Util import number
from secret import flag


size = 256
e = 65537
p = number.getPrime(size)
q = number.getPrime(size)
avg = (p+q)/2
n = p*q

m = libnum.s2n(flag)
c = pow(m, e, n)

print('n = %d' % n)
print('avg = %d' % avg)
print('c = %d' % c)
1
2
3
n = 5700102857084805454304483466349768960970728516788155745115335016563400814300152521175777999545445613444815936222559357974566843756936687078467221979584601
avg = 75635892913589759545076958131039534718834447688923830032758709253942408722875
c = 888629627089650993173073530112503758717074884215641346688043288414489462472394318700014742820213053802180975816089493243275025049174955385229062207064503

0x02 解题

解方程组,由
$$
\phi(n) = (q-1)\times(p-1)
$$
得到
$$
\phi(n)=p\times{q}-(p+q)+1
$$
这里的p*q=n已知,$p+q$可以用avg*2代替.

解题脚本:

1
2
3
4
5
6
7
8
9
10
11
from Crypto.Util.number import *

n = 5700102857084805454304483466349768960970728516788155745115335016563400814300152521175777999545445613444815936222559357974566843756936687078467221979584601
avg = 75635892913589759545076958131039534718834447688923830032758709253942408722875
c = 888629627089650993173073530112503758717074884215641346688043288414489462472394318700014742820213053802180975816089493243275025049174955385229062207064503
phi = n - avg*2 + 1
e = 65537
import gmpy2
d = gmpy2.invert(e,phi)
m = pow(c,d,n)
long_to_bytes(m)

image-20221019193754543