测中日记 LitCTF 密码学 WP

1、梦想是红色的

题目描述: 曾经我有个梦想。

Flag格式 NSSCTF{}

题目附件内容:

自由友善公正公正敬业法治自由自由和谐平等自由自由公正法治诚信民主诚信自由自由诚信民主爱国友善平等诚信富强友善爱国自由诚信民主敬业爱国诚信民主友善爱国平等爱国爱国敬业敬业友善爱国公正敬业爱国敬业和谐文明诚信文明友善爱国自由诚信民主爱国爱国诚信和谐友善爱国自由友善平等爱国友善平等友善自由诚信自由平等爱国爱国敬业敬业友善爱国敬业敬业友善自由友善平等诚信自由法治诚信和谐

看见附件内容,我直接确定它是核心价值观编码,直接把它丢到解码平台就可以解出

 解码后得到明文 LitCTF{为之则易,不为则难}

然后把Lit改为NSS,所以flag为NSSCTF{为之则易,不为则难}

2、你是我的关键词(Keyworld)

题目描述: YOU are my keworld

Flag格式 NSSCTF{}

附件内容:

IFRURC{X0S_YP3_JX_HBXV0PA}

看完题目,很显然这道题是关键词密码。

根据题目描述keyword为YOU

所以我们只需要把IFRURC{X0S_YP3_JX_HBXV0PA}放到解码工具里解开即可

得到明文为 LITCTF{Y0U_AR3_MY_KEYW0RD}

同上,修改完得到flag:NSSCTF{Y0U_AR3_MY_KEYW0RD}

3、Is this only base?

flag以NSSCTF{}形式提交

附件内容:

SWZxWl=F=DQef0hlEiSUIVh9ESCcMFS9NF2NXFzM
今年是本世纪的第23年呢

根据题目,应该是需要进行base解码但密文不符合base编码的格式,所以我们应该把密文变成base的格式,也就是把密文中的两个“=”弄到最后面,我当时直接想到的是用栅栏密码,在加上附件里的提示“今年是本世纪的第23年呢”所以key应该是23,把密文放到解码工具进行解码

得到 SWZxWlFDe0liUV9ScF9FNFMzX2NSMCEhISEhfQ==

在把栅栏解密后的密文进行base64解码

得到 IfqZQC{IbQ_Rp_E4S3_cR0!!!!!}

但解码得到的明文格式并不是flag格式,所以这并不是明文,还需要接着解码

观察这串密文我们可以发现Z向前移动23位为C,Q向前移动23位为T,C向前移动23位为F

所以 IfqZQC{IbQ_Rp_E4S3_cR0!!!!!} 应该是明文经凯撒密码偏移23位所得

这样我们就得到了明文 LitCTF{LeT_Us_H4V3_fU0!!!!!} 

同上。修改得到flag:NSSCTF{LeT_Us_H4V3_fU0!!!!!}

4、P_Leak

 - 题目描述:很简单的泄露!!!

flag以NSSCTF{}形式提交

题目附件:

from Crypto.Util.number import *
e=65537
m=bytes_to_long(b'xxxx')
p=getPrime(512)
q=getPrime(512)
n=p*q
phi=(p-1)*(q-1)
d=inverse(e,phi)
dp=d%(p-1)
c=pow(m,e,n)
print("dp=",dp)
print("n=",n)
print("c=",c)
#dp= 5892502924236878675675338970704766304539618343869489297045857272605067962848952532606770917225218534430490745895652561015493032055636004130931491316020329
#n= 50612159190225619689404794427464916374543237300894011803225784470008992781409447214236779975896311093686413491163221778479739252804271270231391599602217675895446538524670610623369953168412236472302812808639218392319634397138871387898452935081756580084070333246950840091192420542761507705395568904875746222477
#c= 39257649468514605476432946851710016346016992413796229928386230062780829495844059368939749930876895443279723032641876662714088329296631207594999580050131450251288839714711436117326769029649419789323982613380617840218087161435260837263996287628129307328857086987521821533565738409794866606381789730458247531619

这题呢是有关RSA的dp泄露,我也不会,于是我就上网找了其他师傅写的文章了解了一下

dp呢就是dp≡dmod(p−1)

所以我们只需要通过dp求出p与q就能解决这到题

然后我们编写脚本

import gmpy2
e=65537
n=50612159190225619689404794427464916374543237300894011803225784470008992781409447214236779975896311093686413491163221778479739252804271270231391599602217675895446538524670610623369953168412236472302812808639218392319634397138871387898452935081756580084070333246950840091192420542761507705395568904875746222477
c=39257649468514605476432946851710016346016992413796229928386230062780829495844059368939749930876895443279723032641876662714088329296631207594999580050131450251288839714711436117326769029649419789323982613380617840218087161435260837263996287628129307328857086987521821533565738409794866606381789730458247531619
dp=5892502924236878675675338970704766304539618343869489297045857272605067962848952532606770917225218534430490745895652561015493032055636004130931491316020329
for x in range(1,e):
    if(e*dp%x==1):
        p=(e*dp-1)//x+1
        if(n%p!=0):
            continue
        q=n//p
        print("p:",p)
        print("q:",q)

 运行得到

p: 6806799523138018080299902882276558488747716843553684211592596116521280697310815421606971932213296208463550463809415551367299447277297860237756145281101709
q: 7435529578648849854035363871331880952240009932326862680743902402621727268266241566852168314449841733241705179681279879240181196857939144128592553250929153

我们再将p、q带人脚本

from Crypto.Util.number import *
c=39257649468514605476432946851710016346016992413796229928386230062780829495844059368939749930876895443279723032641876662714088329296631207594999580050131450251288839714711436117326769029649419789323982613380617840218087161435260837263996287628129307328857086987521821533565738409794866606381789730458247531619
n=50612159190225619689404794427464916374543237300894011803225784470008992781409447214236779975896311093686413491163221778479739252804271270231391599602217675895446538524670610623369953168412236472302812808639218392319634397138871387898452935081756580084070333246950840091192420542761507705395568904875746222477
p=6806799523138018080299902882276558488747716843553684211592596116521280697310815421606971932213296208463550463809415551367299447277297860237756145281101709
q=7435529578648849854035363871331880952240009932326862680743902402621727268266241566852168314449841733241705179681279879240181196857939144128592553250929153
pq=p*(q-1)
qp=q*(p-1)
e=65537
phi=pq*qp//n
d=inverse(e,phi)
m=pow(c,d,n)
print(long_to_bytes(m))

运行得到明文

b'LitCTF{Prim3_1s_Le@k!!!!!}'

这样我们就把这道题解开了(不要问我为什么写两个脚本,因为我是菜狗​​​​​​​

 同上,修改得到flag:NSSCTF{Prim3_1s_Le@k!!!!!}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值