bugku_抄错的字符

根据题意,我们要尽量猜测每个字符的可能性,首先字符最少有大写/小写可能性,部分字符有额外的数字可能性,记得看密文长度(不是4的整倍数)故补 =(记得在字典里把等号也映射上)

密文可以一起暴力跑递归也可以4个一段逐段解析

import base64

# 密文
m = 'QWIHBLGZZXJSXZNVBZW='
# 解密映射字典
d = {
    'Q': ['Q', 'q', '9'], 'W': ['W', 'w'], 'I': ['I', 'i', '1'],
    'H': ['H', 'h'], 'B': ['B', 'b', '8'], 'L': ['L', 'l', '1'],
    'G': ['G', 'g', '9'], 'Z': ['Z', 'z', '2'], 'X': ['X', 'x'],
    'J': ['J', 'j'], 'S': ['S', 's', '5'], 'N': ['N', 'n'],
    'V': ['V', 'v'],'=':['=']
}

# 用于存储有效的base64解码结果
v = []

# 递归函数,尝试递归所有可能性并base64解码
def f(i, c):
    # 当前索引超出密文长度,尝试解码
    if i == len(m):
        try:    # 尝试base64解码
            b = base64.b64decode(c)
            s = b.decode('utf-8')
            #解码成功,则记录结果
            if s.isprintable():
                v.append(s)
        except: # 解码失败,忽略这个组合
            pass
        return

    # 获取当前密文字符对应的所有可能字符
    p = m[i]
    r = d[p]

    # 遍历可能的字符,并递归处理
    for a in r:
        f(i + 1, c + a)

# 递归解码
f(0, '')

# 打印结果
print("结果:")
for e in v:
    print(e)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值