crypto刷题篇1(Base)

1.[LitCTF 2023]Is this only base?

观察密文,发现里面是有等号的推测可能是要将等号移动到密文最后面,提示里又给了数字23(偏移量),推测是栅栏密码,解码之后为

SWZxWlFDe0liUV9ScF9FNFMzX2NSMCEhISEhfQ==

编码中有特殊字符=用于与填充,字符串长度为44是四的倍数,我们可以推断这是Base64编码

IfqZQC{IbQ_Rp_E4S3_cR0!!!!!}

凯撒解码偏移量为23 

得到flag:LitCTF{LeT_Us_H4V3_fU0!!!!!}

2.[BJDCTF2020]这是base??

题目中给出的密文是经过“被替换了的”base64编码表得出的,而解题的大体思路就是先把密文恢复成用标准的base64编码表编码的结果,再调用Python中已有的base64.b64decode()函数恢复出明文即可。

换表

就是要找到密文c中的每个字符在dict中对应的位置(下标),再找到这些位置在标准base64编码表中对应的字符。
因为base64的编码过程(原理)是不变的,只是最后一步根据数字找对应的字符时,字符的顺序变了,所以我们只要找到这些数字在标准base64编码表中对应的字符,就转换回了我们熟悉的base64编码结果,也就可以进一步借助Python已有的base64库来恢复出明文了。

调用Python的base64库函数b64decode()即可得到明文

运行得到的m2的输出结果,即可得到flag

3.[AFCTF2018]BASE

已经知道是Base加密但不知道是base16还是32还是64 ,由于密文太长,无法在线解密,所以用

程序解决

import re, base64
s = open("flag_encode.txt", "rb").read()
# 正则表达式,用来尽可能多的匹配字符串
base16_dic = r'^[A-F0-9]*$'
base32_dic = r'^[A-Z2-7=]*$'
base64_dic = r'^[A-Za-z0-9/+=]*$'
# 循环解码
while True:
    t = s.decode()
    if '{' in t:
        print(t)
        break
    elif re.match(base16_dic, t):
        s = base64.b16decode(s)
        print(16)
    elif re.match(base32_dic, t):
        s = base64.b32decode(s)
        print(32)
    elif re.match(base64_dic, t):
        s = base64.b64decode(s)
        print(64)

 运行结果

16
64
64
16
64
32
32
32
16
32
32
32
32
32
16
32
32
64
32
64
64
32
32
16
32
64
64
16
64
64
afctf{U_5h0u1d_Us3_T00l5}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值