2021年“绿城杯”网络安全大赛-Crypto-RSA-1

2021年“绿城杯”网络安全大赛-Crypto-RSA-1

题目名称:RSA-1
题目内容:RSA
题目分值:100.0
题目难度:容易
相关附件:RSA-1的附件.zip

解题思路:

已知

n = p * q
M = 2021 * m * 1001 * p
c = pow(M,e,n)

n与c有公因子p,求出p,q

p=gmpy2.gcd(n,c)
q=n//p

常规rsa解密,完整脚本

import binascii
from Crypto.Util.number import *
import gmpy2

n = 17365231154926348364478276872558492775911760603002394353723603461898405740234715001820111548600914907617003806652492391686710256274156677887101997175692277729648456087534987616743724646598234466094779540729413583826355145277980479040157075453694250572316638348121571218759769533738721506811175866990851972838466307594226293836934116659685215775643285465895317755892754473332034234495795936183610569571016400535362762699517686781602302045048532131426035260878979892169441059467623523060569285570577199236309888155833013721997933960457784653262076135561769838704166810384309655788983073376941843467117256002645962737847
c = 6944967108815437735428941286784119403138319713455732155925055928646536962597672941805831312130689338014913452081296400272862710447207265099750401657828165836013122848656839100854719965188680097375491193249127725599660383746827031803066026497989298856420216250206035068180963797454792151191071433645946245914916732637007117085199442894495667455544517483404006536607121480678688000420422281380539368519807162175099763891988648117937777951069899975260190018995834904541447562718307433906592021226666885638877020304005614450763081337082838608414756162253825697420493509914578546951634127502393647068722995363753321912676
p=print(gmpy2.gcd(n,c))
#p=150290608270992439844054823303154263794197803561695786056860615174575181277160032222859532335454486914357850849343036173838960820180867595169623670363963732315901587946639577107202780317748525709407153327463601548012321945759392416846089189522151851138821377551427960151260776474250605261723480167088408148729
q=n//p
# 公钥e
e = 65537
# 两个素数的乘积n
n = p * q
phi = (p - 1) * (q - 1)
# 逆元d
d = gmpy2.invert(e, phi)
print(d)
# 明文m
m = pow(c, d, n)
m = m//(2021 * 1001 * p)
#print(hex(m))
print(binascii.unhexlify(hex(m)[2:].strip("L")))
#b'flag{Math_1s_1nterest1ng_hah}'

flag{Math_1s_1nterest1ng_hah}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜白君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值