SWPU新生赛2021 Crypto部分WriteUp

6 篇文章 4 订阅

第一波放题

crypto1

直接谷歌搜e1e2 = 3087 n = p*q,找到striving的博客,不愧是密码神
由于striving的旧博客域名已过期,因此就不放密码神的博客了

c1= 463634070971821449698012827631572665302589213868521491855038966879005784397309389922926838028598122795187584361359142761652619958273094398420314927073008031088375892957173280915904309949716842152249806486027920136603248454946737961650252641668562626310035983343018705370077783879047584582817271215517599531278507300104564011142229942160380563527291388260832749808727470291331902902518196932928128107067117198707209620169906575791373793854773799564060536121390593687449884988936522369331738199522700261116496965863870682295858957952661531894477603953742494526632841396338388879198270913523572980574440793543571757278020533565628285714358815083303489096524318164071888139412436112963845619981511061231001617406815056986634680975142352197476024575809514978857034477688443230263761729039797859697947454810551009108031457294164840611157524719173343259485881089252938664456637673337362424443150013961181619441267926981848009107466576314685961478748352388452114042115892243272514245081604607798243817586737546663059737344687130881861357423084448027959893402445303299089606081931041217035955143939567456782107203447898345284731038150377722447329202078375870541529539840051415759436083384408203659613313535094343772238691393447475364806171594
c2= 130959534275704453216282334815034647265875632781798750901627773826812657339274362406246297925411291822193191483409847323315110393729020700526946712786793380991675008128561863631081095222226285788412970362518398757423705216112313533155390315204875516645459370629706277876211656753247984282379731850770447978537855070379324935282789327428625259945250066774049650951465043700088958965762054418615838049340724639373351248933494355591934236360506778496741051064156771092798005112534162050165095430065000827916096893408569751085550379620558282942254606978819033885539221416335848319082054806148859427713144286777516251724474319613960327799643723278205969253636514684757409059003348229151341200451785288395596484563480261212963114071064979559812327582474674812225260616757099890896900340007990585501470484762752362734968297532533654846190900571017635959385883945858334995884341767905619567505341752047589731815868489295690574109758825021386698440670611361127170896689015108432408490763723594673299472336065575301681055583084547847733168801030191262122130369687497236959760366874106043801542493392227424890925595734150487586757484304609945827925762382889592743709682485229267604771944535469557860120878491329984792448597107256325783346904408
n= 609305637099654478882754880905638123124918364116173050874864700996165096776233155524277418132679727857702738043786588380577485490575591029930152718828075976000078971987922107645530323356525126496562423491563365836491753476840795804040219013880969539154444387313029522565456897962200817021423704204077133003361140660038327458057898764857872645377236870759691588009666047187685654297678987435769051762120388537868493789773766688347724903911796741124237476823452505450704989455260077833828660552130714794889208291939055406292476845194489525212129635173284301782141617878483740788532998492403101324795726865866661786740345862631916793208037250277376942046905892342213663197755010315060990871143919384283302925469309777769989798197913048813940747488087191697903624669415774198027063997058701217124640082074789591591494106726857376728759663074734040755438623372683762856958888826373151815914621262862750497078245369680378038995425628467728412953392359090775734440671874387905724083226246587924716226512631671786591611586774947156657178654343092123117255372954798131265566301316033414311712092913492774989048057650627801991277862963173961355088082419091848569675686058581383542877982979697235829206442087786927939745804017455244315305118437

from gmpy2 import *
from Crypto.Util.number import *
E = 3087
fac = [3, 3, 7, 7, 7]

factor = [3, 7, 3 * 3, 3 * 7, 7 * 7, 3 * 3 * 7, 3 * 7 * 7, 7 * 7 * 7, 3 * 7 * 7 * 7, 3 * 3 * 7 * 7]
for e1 in factor:
    assert E % e1 == 0
    e2 = E // e1
    g = gcd(e1, e2)
    print(g)
    _, s, t = gcdext(e1, e2)
    M = pow(c1, s, n) * pow(c2, t, n) % n
    for k in range(1000000):
        a = iroot(M + k * n, g)
        if a[1]:
            print(long_to_bytes(a[0]))
            break

#striving yyds!
#http://www.zbc53.top/archives/148/

NSSCTF{d64dba66-b608-4255-b888-0b0f25c2f90e}

crypto2

共模攻击,直接套脚本

import gmpy2
import binascii
c1= 100156221476910922393504870369139942732039899485715044553913743347065883159136513788649486841774544271396690778274591792200052614669235485675534653358596366535073802301361391007325520975043321423979924560272762579823233787671688669418622502663507796640233829689484044539829008058686075845762979657345727814280
c2= 86203582128388484129915298832227259690596162850520078142152482846864345432564143608324463705492416009896246993950991615005717737886323630334871790740288140033046061512799892371429864110237909925611745163785768204802056985016447086450491884472899152778839120484475953828199840871689380584162839244393022471075
e1= 3247473589
e2= 3698409173
n= 103606706829811720151309965777670519601112877713318435398103278099344725459597221064867089950867125892545997503531556048610968847926307322033117328614701432100084574953706259773711412853364463950703468142791390129671097834871371125741564434710151190962389213898270025272913761067078391308880995594218009110313

s = gmpy2.gcdext(e1,e2)# 扩展欧几里得算法
m1 = gmpy2.powmod(c1,s[1],n)
m2 = gmpy2.powmod(c2,s[2],n)

m = (m1*m2)%n
print(binascii.unhexlify(hex(m)[2:]))

NSSCTF{xxxxx******xxxxx}

crypto3

在striving的wp里找到这篇
由于striving博客的域名已过期,这里就不放博客了
[NPUCTF2020]共 模 攻 击这道题
可以发现题目也是e1,e2 = q,p,而且那道题的hint是m<400
这里print了一下flag,发现才308
于是套一下脚本
sagemath使用

from Crypto.Util.number import *
c1= 17893542812755845772427795161304049467610774531005620109503081344099161906017295486868699578946474114607624347167976713200068059018517606363517478396368430072890681401898145302336139240273132723451063402106360810413024642916851746118524166947301681245568333254648265529408446609050354235727237078987509705857
c2= 95580409405085606847879727622943874726633827220524165744517624606566789614499137069562997931972825651309707390763700301965277040876322904891716953565845966918293178547100704981251056401939781365264616997055296773593435626490578886752446381493929807909671245959154990639046333135728431707979143972145708806954
n= 140457323583824160338989317689698102738341061967768153879646505422358544720607476140977064053629005764551339082120337223672330979298373653766782620973454095507484118565884885623328751648660379894592063436924903894986994746394508539721459355200184089470977772075720319482839923856979166319700474349042326898971

PR.<m> = PolynomialRing(Zmod(n))
f = m^2-(c1+c2)*m+c1*c2
x0 = f.small_roots(X=2^400)
print(x0)

在这里插入图片描述
然后python再n2s

import libnum
print(libnum.n2s(1920535408007397834236393374892057067669865609963495845501))

得到flag

NSSCTF{why_gongmo_again}

crypto4

q = next_prime(p)可知,q和p相近,于是用yafu分解n
得到q和p,之后就是基操

import gmpy2
import binascii
c = 10227915341268619536932290456122384969242151167487654201363877568935534996454863939953106193665663567559506242151019201314446286458150141991211233219320700112533775367958964780047682920839507351492644735811096995884754664899221842470772096509258104067131614630939533042322095150722344048082688772981180270243
n = 52147017298260357180329101776864095134806848020663558064141648200366079331962132411967917697877875277103045755972006084078559453777291403087575061382674872573336431876500128247133861957730154418461680506403680189755399752882558438393107151815794295272358955300914752523377417192504702798450787430403387076153
p = 7221289171488727827673517139597844534869368289455419695964957239047692699919030405800116133805855968123601433247022090070114331842771417566928809956045093
q = 7221289171488727827673517139597844534869368289455419695964957239047692699919030405800116133805855968123601433247022090070114331842771417566928809956044421
e = 65537

L = (p-1)*(q-1)
d = gmpy2.invert(e,L)
m = gmpy2.powmod(c,d,n)

print(binascii.unhexlify(hex(m)[2:]))

NSSCTF{no_why}

crypto5

c很小,考虑低指数攻击,直接套脚本。常见的3试试
①m3<n,也就是说m3=c。
②m3>n,即(m3+i·n)mod n=c(爆破i)

import gmpy2
import binascii
e = 3
c= 25166751653530941364839663846806543387720865339263370907985655775152187319464715737116599171477207047430065345882626259880756839094179627032623895330242655333
n= 134109481482703713214838023035418052567000870587160796935708584694132507394211363652420160931185332280406437290210512090663977634730864032370977407179731940068634536079284528020739988665713200815021342700369922518406968356455736393738946128013973643235228327971170711979683931964854563904980669850660628561419
i = 0
while True:
    if gmpy2.iroot((c+i*n),3)[1] == True:
        m = gmpy2.iroot((c+i*n),3)[0]
        break
    i += 1

print(binascii.unhexlify(hex(m)[2:]))

NSSCTF{because_i_like}

crypto6

base16 base32 base64
得到5e110989-dc43-1bd3-00b4-9009206158fe

NSSCTF{5e110989-dc43-1bd3-00b4-9009206158fe}

crypto7

cmd5解密即可

NSSCTF{md5yyds}

crypto8

UUencode

NSSCTF{cheese_is_power}

crypto9

复制查了一下,是维吉尼亚
去手撸一下
首先密文是AKKPLX{qv5x0021-7n8w-wr05-x25w-7882ntu5q984}
A—N
K—S
在这里插入图片描述
第一个是N,然后发现第4 对的上号,说明秘钥长3
后面俩相同,所以只需要试一下,发现是S,再加一个S,正好出秘钥
秘钥就是NSS
在这里插入图片描述

NSSCTF{dd5f0021-7a8e-ee05-f25e-7882abc5d984}

crypto10

AFFPGS{pbatenghyngvbaf!!!} 凯撒(rot13)

NSSCTF{congratulations!!!}

第二波放题

ez_caesar

base64解码+caeser

NSSCTF{youhaveknowcaesar}

ez_rsa

真的基操,爱了

import gmpy2
p = 1325465431
q = 152317153
e = 65537
L = (p-1)*(q-1)
d = gmpy2.invert(e,L)
print(d)

当然用RSAtools也彳亍,记得md5一下

NSSCTF{08bb8fb628da85923e5734a75ac19ffe}

pigpig

猪圈密码,对照着翻译就彳亍了
懒得再去翻译,自己翻译哈

traditional

二进制
直接搜八卦图
在这里插入图片描述

比如第一个 震坤艮
就是 001 000 100
合起来001000100,转10进制再10进制的ascii转成字符
总的如下:
001000100 001100001 000110000
000110001 001110011 001100001
001101100 001101100
68,97,48,49,115,97,108,108

s = [68,97,48,49,115,97,108,108]
print('NSSCTF{',end='')
for i in s:
    print(chr(i),end='')
print("}")

NSSCTF{Da01sall}

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值