NSSCTF_crypto_[广东强网杯 2021 团队组]RSA and BASE?
提示:base64 素数分解
题目:
RSA:
n=56661243519426563299920058134092862370737397949947210394843021856477420959615132553610830104961645574615005956183703191006421508461009698780382360943562001485153455401650697532951591191737164547520951628336941289873198979641173541232117518791706826699650307105202062429672725308809988269372149027026719779368169
e=36269788044703267426177340992826172140174404390577736281478891381612294207666891529019937732720246602062358244751177942289155662197410594434293004130952671354973700999803850153697545606312859272554835232089533366743867361181786472126124169787094837977468259794816050397735724313560434944684790818009385459207329
c=137954301101369152742229874240507191901061563449586247819350394387527789763579249250710679911626270895090455502283455665178389917777053863730286065809459077858674885530015624798882224173066151402222862023045940035652321621761390317038440821354117827990307003831352154618952447402389360183594248381165728338233
BASE:
"GHI45FQRSCX****UVWJK67DELMNOPAB3"
ok拿到这题你应该去干什么?嗯?你应该干什么?
回答我!look in my eyes!tell me why baby!why baby !why?
先去factor看看n能不能分解
ok成功分解出来了那就很简单了直接开始写脚本
#导入我们需要的库
from Crypto.Util.number import long_to_bytes
import gmpy2
#已知
n=56661243519426563299920058134092862370737397949947210394843021856477420959615132553610830104961645574615005956183703191006421508461009698780382360943562001485153455401650697532951591191737164547520951628336941289873198979641173541232117518791706826699650307105202062429672725308809988269372149027026719779368169
e=36269788044703267426177340992826172140174404390577736281478891381612294207666891529019937732720246602062358244751177942289155662197410594434293004130952671354973700999803850153697545606312859272554835232089533366743867361181786472126124169787094837977468259794816050397735724313560434944684790818009385459207329
c=137954301101369152742229874240507191901061563449586247819350394387527789763579249250710679911626270895090455502283455665178389917777053863730286065809459077858674885530015624798882224173066151402222862023045940035652321621761390317038440821354117827990307003831352154618952447402389360183594248381165728338233
BASE ="GHI45FQRSCX****UVWJK67DELMNOPAB3"
#因式分解出p.q
p = 127059276863396320706295330136200886609600493401056775186365515611547962912096366560863480830412003882577863014816249680438671577507675892180828563868163627
q = 445943381059409537717658916522990906261609738909680208927145849237389096915733551127729182559244164126263654638010224865124975773193229727063534492604345147
#计算phi_n
phi_n = (p - 1)*(q - 1)
#计算私钥d
d = gmpy2.invert(e,phi_n)
#计算密文m
m = long_to_bytes(pow(c,d,n)).decode()
#输出
print(m)
运行后flag为
flag{TCMDIEOH2MJFBLKHT2J7BLYZ2WUE5NYR2HNG====}
.....................
........................
...............................
...................................
..........................................
.................................................
我们是不是忘了点什么?
没错那段base代码还没用上
from itertools import permutations
import base64
str_list = ['T', 'Y', 'Z', '2']
perms = permutations(str_list)
middle_part = []
for perm in perms:
middle_part.append(''.join(perm))
for str_part in middle_part:
flag = 'TCMDIEOH2MJFBLKHT2J7BLYZ2WUE5NYR2HNG===='
t = 'GHI45FQRSCX' + str_part + 'UVWJK67DELMNOPAB3='
table = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567='
table = str.maketrans(t, table)
flag = base64.b32decode(flag.translate(table))
print(flag)
运行后记得找flag
最后flag为
NSSCTF{rsa_and_base_all_right}