BUUCTF-Crypto学习笔记(二)

这是第二篇的BUUCTF-Crypto笔记了,希望自己能坚持下去。

一、篱笆墙的影子

点开题目要我们下载文档,具体信息如下:

#题目原题
felhaagv{ewtehtehfilnakgw}

根据题目的名字和密文的形式,很容易就能猜到是栅栏加密。通过在线加解密栅栏密码的网站https://www.qqxiuzi.cn/bianma/zhalanmima.php进行解密,当栏位为13时,得到正确的内容flag{wethinkwehavetheflag}

二、RSA

点看题目要我们下载文档,具体信息如下:

#题目原文
在一次RSA密钥对生成中,假设p=473398607161,q=4511491,e=17
求解出d作为flga提交

题目要求我们求d,p、q、e都给出来了直接通过脚本就能算出来,解出来结果是125631357777427553

import gmpy2
p=473398607161
q=4511491
e=17
phi = (p-1)*(q-1)
d = gmpy2.invert(e,phi)
print(d)

三、丢失的MD5

看题目要我们下载文档,具体信息如下:

#题目原文
import hashlib   
for i in range(32,127):
    for j in range(32,127):
        for k in range(32,127):
            m=hashlib.md5()
            m.update('TASC'+chr(i)+'O3RJMV'+chr(j)+'WDJKX'+chr(k)+'ZM')
            des=m.hexdigest()
            if 'e9032' in des and 'da' in des and '911513' in des:
                print des

其实这个脚本没什么太大的问题,只是在哈希之前没做UTF8编码会导致报错,我用的是python3所以print格式也要改一下。运行后得到结果e9032994dabac08080091151380478a2

import hashlib   
for i in range(32,127):
    for j in range(32,127):
        for k in range(32,127):
            m=hashlib.md5()
            m.update(('TASC'+chr(i)+'O3RJMV'+chr(j)+'WDJKX'+chr(k)+'ZM').encode(encoding='UTF-8'))
            des=m.hexdigest()
            if 'e9032' in des and 'da' in des and '911513' in des:
                print(des)

四、[BJDCTF 2nd]老文盲了

看题目要我们下载文档,具体信息如下:

#题目原文
罼雧締眔擴灝淛匶襫黼瀬鎶軄鶛驕鳓哵眔鞹鰝

看一下全部是生僻字,也没有其他提示。百度一下,没有生僻字加密的信息。题目老文盲,估计就是提示我们认不得这几个字,使用在线网站https://pinyin.supfree.net得到拼音bì jí dì dà kuò hào zhè jiù shì fǔ lài gē zhí jiē jiāo lè bā dà kuò hào读一下BJD大括号这就是flag直接交了吧大括号。最后尝试结果为BJD{淛匶襫黼瀬鎶軄鶛驕鳓哵}

五、Alice与Bob

点开题目,信息如下:

#题目原文
密码学历史中,有两位知名的杰出人物,Alice和Bob。他们的爱情经过置换和轮加密也难以混淆,即使是没有身份认证也可以知根知底。
就像在数学王国中的素数一样,孤傲又热情。下面是一个大整数:98554799767,请分解为两个素数,分解后,小的放前面,大的放后面,合成一个新的数字,进行md5的32位小写哈希,提交答案。
注意:得到的 flag 请包上 flag{} 提交

直接使用在线网站http://factordb.com分解得到两个素数101999和966233。按照题目要求小的在前面得到101999966233,直接md5哈希一下得到d450209323a847c8d01c6be47c81811a

六、rsarsa

看题目要我们下载文档,具体信息如下:

#题目原文
Math is cool! Use the RSA algorithm to decode the secret message, c, p, q, and e are parameters for the RSA algorithm.


p =  9648423029010515676590551740010426534945737639235739800643989352039852507298491399561035009163427050370107570733633350911691280297777160200625281665378483
q =  11874843837980297032092405848653656852760910154543380907650040190704283358909208578251063047732443992230647903887510065547947313543299303261986053486569407
e =  65537
c =  83208298995174604174773590298203639360540024871256126892889661345742403314929861939100492666605647316646576486526217457006376842280869728581726746401583705899941768214138742259689334840735633553053887641847651173776251820293087212885670180367406807406765923638973161375817392737747832762751690104423869019034

Use RSA to find the secret message

看到解RSA题目的几个参数p、q、e、c都有了,就可以直接写python的加密脚本了。直接运行得到结果5577446633554466577768879988

import gmpy2
p =  9648423029010515676590551740010426534945737639235739800643989352039852507298491399561035009163427050370107570733633350911691280297777160200625281665378483
q =  11874843837980297032092405848653656852760910154543380907650040190704283358909208578251063047732443992230647903887510065547947313543299303261986053486569407
e =  65537
c =  83208298995174604174773590298203639360540024871256126892889661345742403314929861939100492666605647316646576486526217457006376842280869728581726746401583705899941768214138742259689334840735633553053887641847651173776251820293087212885670180367406807406765923638973161375817392737747832762751690104423869019034
n = p * q
phi = (p-1)*(q-1)
d = gmpy2.invert(e,phi)
m = pow(c,d,n)
print(m)

七、大帝的密码武器

看题目要我们下载文档,下载下来文件名称是zip但没有后缀,用010Editor看一下文件头,确实是压缩文件。修改后缀后解压文件

#题目
公元前一百年,在罗马出生了一位对世界影响巨大的人物,他生前是罗马三巨头之一。他率先使用了一种简单的加密函,因此这种加密方法以他的名字命名。
以下密文被解开后可以获得一个有意义的单词:FRPHEVGL
你可以用这个相同的加密向量加密附件中的密文,作为答案进行提交。
#密文
ComeChina

直接通过在线凯撒解密http://www.atoolbox.net/Tool.php?Id=778,当位移为13时,能解出一个有意义的单词SECURITY。那么同样用位移13加密密文,得到PbzrPuvan

八、Windows系统密码

看题目要我们下载压缩文件,解压后有个文件信息如下:

#题目
Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
ctf:1002:06af9108f2e1fecf144e2e8adef09efd:a7fcb22a88038f35a8f39d503e7f0062:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
SUPPORT_388945a0:1001:aad3b435b51404eeaad3b435b51404ee:bef14eee40dffbc345eeb3f58e290d56:::

这个应该是C:\windows\system32\config\SAM,里面的记录了账号和密码。都是经过MD5哈希处理的。直接去ctf账号的密码哈希值a7fcb22a88038f35a8f39d503e7f0062,在网站**https://cmd5.com/**进行解密。得到的结果是good-luck

九、[BJDCTF 2nd]cat_flag

下载下来是一张GIF,如下所示:
在这里插入图片描述
很明显里面就两张不同的图片拼起来的,那么对应到密码学中无非就是二进制中的0和1,培根加密的A和B,以及摩斯密码的.和-。其中培根加密的A和B对应表中的字符串没有8位这么长可以排查,摩斯密码需要有对应的分隔符,图片中没有也可以排除。那么就是二进制了,通过二进制转成字符串。运算的结果是BJD{M!a0~}

a = ['01000010','01001010','01000100','01111011','01001101','00100001','01100001','00110000','01111110','01111101']
b = []
c = []
flag = ''
def hex_to_str(s):
    return ''.join([chr(i) for i in [int(b, 16) for b in s.split(' ')]])
#2进制转10进制
for i in a:
    b.append(int(i,2))
#10进制转16进制
for i in b:
    c.append(hex(i))
#16进制转字符串
for i in c:
    flag += hex_to_str(i)
print(flag)

十、[BJDCTF 2nd]燕言燕语

点开题目,信息如下:

#题目原文
小燕子,穿花衣,年年春天来这里,我问燕子你为啥来,燕子说:
79616E7A69205A4A517B78696C7A765F6971737375686F635F73757A6A677D20

看密文的形式只有大写字母,以及数字,而且字母最大的只有F,很容易就猜想到是16进制。
直接通过在线网站https://www.bejson.com/convert/ox2str将16进制转成字符串
得到yanzi ZJQ{xilzv_iqssuhoc_suzjg}
看到它前面给了yanzi,后面是一个标准的flag格式,但内容不对。将yanzi作为密钥,进行维吉尼亚解密
bjdyanzijiushigeshabi
按照格式进行封装得到
BJD{yanzi_jiushige_shabi}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值