一、.[SWPUCTF 2021 新生赛]ez_rsa——RSA、MD5
1.题目:
p = 1325465431 q = 152317153 e = 65537 计算出d,将d用MD5加密后包裹NSSCTF{}提交
2.python脚本
import gmpy2
import hashlib
p = 1325465431
q = 152317153
e = 65537
n = p*q
phi = (p-1)*(q-1)
d = gmpy2.invert(e, phi)
print(d)
# md5加密
md5_hash = hashlib.md5(b'43476042047970113').hexdigest()
print(md5_hash)
二、[羊城杯 2021]Bigrsa——共享素数
1.题目
from Crypto.Util.number import *
from flag import *
n1 = 103835296409081751860770535514746586815395898427260334325680313648369132661057840680823295512236948953370895568419721331170834557812541468309298819497267746892814583806423027167382825479157951365823085639078738847647634406841331307035593810712914545347201619004253602692127370265833092082543067153606828049061
n2 = 115383198584677147487556014336448310721853841168758012445634182814180314480501828927160071015197089456042472185850893847370481817325868824076245290735749717384769661698895000176441497242371873981353689607711146852891551491168528799814311992471449640014501858763495472267168224015665906627382490565507927272073
e = 65537
m = bytes_to_long(flag)
c = pow(m, e, n1)
c = pow(c, e, n2)
print("c = %d" % c) # 以整数形式输出c
# output
# c = 60406168302768860804211220055708551816238816061772464557956985699400782163597251861675967909246187833328847989530950308053492202064477410641014045601986036822451416365957817685047102703301347664879870026582087365822433436251615243854347490600004857861059245403674349457345319269266645006969222744554974358264
2.题目给了两个n,检查一下是否有不为1的公因数,如果有,说明是共享素数
p = gmpy2.gcd(n1, n2)
10210039189276167395636779557271057346691950991057423589319031237857569595284598319093522326723650646963251941930167018746859556383067696079622198265424441
检查后发现是共享素数,之后求两组d,phi,在题目中c发生了变化,根据题目逆序求解即可。
3.python脚本
import gmpy2
import libnum
n1 = 103835296409081751860770535514746586815395898427260334325680313648369132661057840680823295512236948953370895568419721331170834557812541468309298819497267746892814583806423027167382825479157951365823085639078738847647634406841331307035593810712914545347201619004253602692127370265833092082543067153606828049061
n2 = 115383198584677147487556014336448310721853841168758012445634182814180314480501828927160071015197089456042472185850893847370481817325868824076245290735749717384769661698895000176441497242371873981353689607711146852891551491168528799814311992471449640014501858763495472267168224015665906627382490565507927272073
e = 65537
c = 60406168302768860804211220055708551816238816061772464557956985699400782163597251861675967909246187833328847989530950308053492202064477410641014045601986036822451416365957817685047102703301347664879870026582087365822433436251615243854347490600004857861059245403674349457345319269266645006969222744554974358264
p = gmpy2.gcd(n1, n2)
print(p)
q1 = n1//p
q2 = n2//p
phi1 = (p-1)*(q1-1)
phi2 = (p-1)*(q2-1)
d1 = gmpy2.invert(e, phi1)
d2 = gmpy2.invert(e, phi2)
m1 = gmpy2.powmod(c, d2, n2)
m = gmpy2.powmod(m1, d1, n1)
print(libnum.n2s(int(m)))
三、[UUCTF 2022 新生赛]爱丽丝梦境的兔子——在线网站
1.题目:一只没有钥匙的兔子背着社会主义核心价值观跳过6排栅栏
U2FsdGVkX19ixL7s5HryOhyL5oSScYGNVBVWl+sUMYQwTRniXreqeSp/iTHtkcxt
qicNL4xpHc5X34Daat7ixqkZMpU4JV9USOKKTAw9HJfGnoDzFF/JY0gzJpxgmW1X
4nXktQ4J7OM14EMcTrhPDIOfG2VDJr4yViWc/vNS8np1IFeIRXMoWGAJHuI8IOVG
tXi2JX6hTseYkJc2LGHJkLQ0WDW67RyhPC3vOwmJHOs/wMefWCaYteoQYOCReltm
FYuuibegOvFSUl1f0Tu7488mBHNjTrDSC76HjgxJJ6h9P36mLucQUBiFMyjLe0k1
+TTb39iMaGCuPiDb0UoAcAZPolz7RCeXqZOdzcJsPIFK/tcFLGeOPJTfFhJiwga6
cENO7pqeIB1qsRqEjyO4m4wgkhugdcs10CCevOJxNiQaWtv/FIOw9oCi5Q0VP+C9
qXZbuQ==
2.根据“没有钥匙的兔子”推断是rabbit加密,使用在线网站解密后的到社会主义核心价值观
公正公正和谐和谐平等诚信平等法治和谐公正友善公正公正诚信文明法治自由和谐和谐公正民主公正和谐公正友善敬业自由和谐公正法治和谐富强平等诚信平等文明民主法治友善平等公正诚信和谐法治自由法治诚信和谐平等法治公正平等法治敬业
继续使用在线网站解密,得到f3_sllt3acoCg0_!{mt}Wey,根据提示6排栅栏,设置每组字数为6解密后得到flag。
四、[LitCTF 2023]你是我的关键词(Keyworld)
1.题目:YOU are my keworld。
2.根据题目推断是关键词密码,关键词是YOU,通过在线网站解密。
3.
五、[鹤城杯 2021]A_CRYPTO
4O595954494Q32515046324757595N534R52415653334357474R4N575955544R4O5N4Q46434S4O59474253464Q5N444R4Q51334557524O5N4S424944473542554O595N44534O324R49565746515532464O49345649564O464R4R494543504N35
有数字和字母,且没有等号,猜测是ROT13,解码后得:
4B595954494D32515046324757595A534E52415653334357474E4A575955544E4B5A4D46434F4B59474253464D5A444E4D51334557524B5A4F424944473542554B595A44534B324E49565746515532464B49345649564B464E4E494543504A35
发现字母范围是A-F,判断是base16,在线解码
KYYTIM2QPF2GWYZSNRAVS3CWGNJWYUTNKZMFCOKYGBSFMZDNMQ3EWRKZOBIDG5BUKYZDSK2NIVWFQU2FKI4VIVKFNNIECPJ5
只有数字和字母,没有0,1,猜测是base32编码
V143Pytkc2lAYlV3SlRmVXQ9X0dVdmd6KEYpP3t4V29+MElXSER9TUEkPA==
有=,且有0,判断是base64编码
W^7?+dsi@bUwJTfUt=_GUvgz(F)?{xWo~0IWHD}MA$<
有很多其他的符号,尝试base85编码,得到
flag{W0w_y0u_c4n_rea11y_enc0d1ng!}