BUUCTF——CRYPTO(记录不熟悉的题)(2)

目录

达芬奇密码

rot

[WUSTCTF2020]佛说:只能四天

这是什么

 [MRCTF2020]古典密码知多少

[NCTF2019]Keyboard 

传感器

 [MRCTF2020]天干地支+甲子

[BJDCTF2020]signin 

[MRCTF2020]vigenere

[MRCTF2020]keyboard


达芬奇密码

百度一下什么是达芬奇密码,发现与斐波那契数列有关,选取部分项,发现给出的数组列中的数是对应斐波那契数列位进行移位得到的, 

 比如第零位没有移动,而第一位的233,是原数列第十二位移动得到的(原数列有个起始的0),由此可以猜测,给出的神秘数字串是由32位flag对应进行移位得到的,参考大佬的脚本(要么自己手动慢慢移、、、)

#主要思路是遍历fakefibbo,然后找出对应哪一位,如fb中第二个数对应rb中第五个
#然后cipher对应fakebibbo,因此cipher中第二个数对应flag第五个数
#因此有reslut[4]=cipher[1],依次类推
realfibbo = '1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025 121393 196418 317811 514229 832040 1346269 2178309'
fakefibbo = '1 233 3 2584 1346269 144 5 196418 21 1597 610 377 10946 89 514229 987 8 55 6765 2178309 121393 317811 46368 4181 1 832040 2 28657 75025 34 13 17711'
cipher = '36968853882116725547342176952286'
realfibbo = realfibbo.split(' ')
fakefibbo = fakefibbo.split(' ')
result = ['a']*32
for i in range(len(cipher)):
#这里要考虑到第二个1(fb[24])寻找的时候,会找到1123中第一个数,也就是index=0,而我们希望他找到第二个数,也就是index=1
    if(i == 24):
        index = 1
    else:
        index = realfibbo.index(fakefibbo[i])
    result[index] = cipher[i]
for i in result:
    print(i,end='')

得到flag

rot

 根据题目,猜想应该是rot加密,但不知到是哪种类型,用代码得到:

a = [83,89,78,84,45,86,96,45,115,121,110,116,136,132,132,132,108,128,117,118,134,110,123,111,110,127,108,112,124,122,108,118,128,108,131,114,127,134,108,116,124,124,113,108,76,76,76,76,138,23,90,81,66,71,64,69,114,65,112,64,66,63,69,61,70,114,62,66,61,62,69,67,70,63,61,110,110,112,64,68,62,70,61,112,111,112]
s = ''
for i in a:    #逐个先转int,再转字符后又组成字符串
    s += chr(i)
for i in range(1,26):
    for j in range(len(s)):
         print(chr(ord(s[j])-i),end='')
    print()

除了rot13,其它的都乱码了,说明是rot13类型 

得到的falg中有问号,有md5的结果,用在线网站怎么也试不出来,故只能暴力破解了

import hashlib
s='flag{www_shiyanbar_com_is_very_good_'
m='38e4c352809e150186920aac37190cbc'

def revmd5():
    for i in range(33,127):
        for j in range(33,127):
            for k in range(33,127):
                for n in range(33,127):
                    a=s+chr(i)+chr(j)+chr(k)+chr(n)+'}'
                    ha=hashlib.md5(a.encode()).hexdigest()
                    if(ha == m):
                        print(a)
                        return
revmd5()

代码参考:http://t.csdn.cn/aCjcI

[WUSTCTF2020]佛说:只能四天

题目:

根据《新约全书》,先解密佛伦,在线网站:http://hi.pcmoe.net/buddha.html

得到核心价值编码,在线解密网站:http://www.hiencode.com/cvencode.html 

得到RLJDQTOVPTQ6O6duws5CD6IB5B52CC57okCaUUC3SO4OSOWG3LynarAVGRZSJRAEYEZ_ooe_doyouknowfence

 末尾的“doyouknowfence”提示是栅栏加密,用脚本解:

 末尾的“doyouknowCaesar”提示是凯撒加密(移动3位),同脚本解,找到第三个:

 最后是base32,https://www.qqxiuzi.cn/bianma/base.php

这是什么

jsfuck 密码,用6种符号来编写代码。(、)、+、[、]、!。 打开控制台,将密文复制,然后回车即可得到flag

 [MRCTF2020]古典密码知多少

蓝色的是猪圈密码,橙色的是圣堂武士密码, 黑色的是标准银河字母,分别对应的解密表

猪圈:

 圣堂武士

标准银河字母: 

对照表可以得到:FGCPFLIRTUASYON(题目提示是大写字母),且题目里提到了栅栏,故用栅栏解密:

[NCTF2019]Keyboard 

题目提示键盘,所所以要从键盘上入手

观察发现,给的字母全在一排,且与上面的数字一一对应,如p-0,o-9等等,

 在九宫格上,如第一个字符ooo,o对应9,且有3个o,表示,第九格的第三个字母,以此类推,得到flag:youaresosmartthatthisisjustapieceofcake

也可以用脚本解,参考别人的代码:

cipher="ooo yyy ii w uuu ee uuuu yyy uuuu y w uuu i i rr w i i rr rrr uuuu rrr uuuu t ii uuuu i w u rrr ee www ee yyy eee www w tt ee"
base=" qwertyuiop"
a=[" "," ","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"]
for part in cipher.split(" "):
    s=base.index(part[0])
    count=len(part)
    print(a[s][count-1],end="")

传感器

题目提示曼联,查了是曼彻斯特编码,搞不懂原理,借鉴大佬们的脚本:

cipher='5555555595555A65556AA696AA6666666955'
def iee(cipher):
    tmp=''
    for i in range(len(cipher)):
        a=bin(eval('0x'+cipher[i]))[2:].zfill(4)
        tmp=tmp+a[1]+a[3]
        print(tmp)
    plain=[hex(int(tmp[i:i+8][::-1],2))[2:] for i in range(0,len(tmp),8)]
    print(''.join(plain).upper())

iee(cipher)

 [MRCTF2020]天干地支+甲子

这道题与“传统知识+古典密码”相同,先对照

 写下对应数,然后在每个数的基础上加上60(题目没有提示?),接着对照ASCII表写出flag:

[BJDCTF2020]signin 

在线网站16进制转字符串就得到flag

[MRCTF2020]vigenere

题目vigenere,说明是维吉尼亚密码,在线爆破:https://www.guballa.de/vigenere-solver

提交的时候加上下划线就行。

[MRCTF2020]keyboard

 与上面的[NCTF2019]Keyboard 相同的解法。mobilephone

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值