base64隐写解密脚本

今天做buu的一道题 [NPUCTF2020]芜湖🛫

题目考察base64隐写。

什么是base64隐写?

base64在加密时,二进制不足6位的地方以0代替,而在解密时这些空下的0如果被改为1也不会被读取,于是就可以隐藏信息。由于这样的隐藏位最多有四个,所以base64隐写需要很多条才能存储一句讯息。

下面是解密脚本

def base64_stego(str):
    base64_list="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"

    temp=''
    if str.count('=')==2:
        a=len(bin( base64_list.find(str[-3]) & 0xf).replace('0b', ''))
        if a==3:
            temp+="0"
        elif a==2:
            temp+="00"
        elif a==1:
            temp+="000"
        temp+=bin( base64_list.find(str[-3]) & 0xf).replace('0b', '')
        print(temp)

    elif str.count('=')==1:
        a = len(bin(base64_list.find(str[-3]) & 0x3).replace('0b', ''))
        if a == 3:
            temp += "0"
        elif a == 2:
            temp += "00"
        elif a == 1:
            temp += "000"
        temp += bin(base64_list.find(str[-3]) & 0x3).replace('0b', '')
        print(temp)
    return temp
a = ["55y85YmN6YeN5aSN55qE6aOO5pmvLG==",
"5riQ5riQ5qih57OK5LqG57qm5a6aLO==",
"5pif56m65LiL5rWB5rWq55qE5L2gLH==",
"5LuN54S256eY5a+G55qE6Led56a7LA==",
"5rip5bqm5raI5aSx55qE556s6Ze0LH==",
"5peg5rOV6Kem5pG455qE5piO5aSpLF==",
"5rKh5pyJ5byV5Yqb55qE5LiW55WMLG==",
"5rKh5pyJ6ISa5Y2w55qE5YWJ5bm0LD==",
"6L+Y5Zyo562J552A5L2g5Ye6546wLH==",
"5pel5pel5aSc5aSc6Ieq6L2s55qE6KGM5pifLE==",
"5Yiw5aSE6YGu5ruh5Yir5Lq655qE6IOM5b2xLG==",
"6K6p6aOO5ZC55pWj5re35Lmx55qE5ZG85ZC4LG==",
"5b+r5b+r5riF6YaSfn==",
"6Z2Z6Z2Z54Wn5Lqu5Y6f5p2l55qE6Ieq5bexLL==",
"5aSp56m65rSS5ruh5b+954S255qE5YWJ5piOLE==",
"55y85Lit5Y+q6KaB57ua54OC55qE5aSp6ZmFLG==",
"5YaN6aOe6KGMIW==",
"5oiR5YuH5pWi5Zyw5oqs6LW35aS0LM==",
"55yL552A6Iyr6Iyr55qE5a6H5a6ZLH==",
"5aSa5bCR5pyq55+l55qE5pif55CDLJ==",
"5pyJ5rKh5pyJ6YCa5ZCR5pyq5p2l6Lev5Y+jLD==",
"5Lqy54ix55qE5LyZ5Ly0LB==",
"6K6p5oiR5Lus5LiA6LW354K554eDLG==",
"5YuH5rCU5ZKM5L+h5b+1LO==",
"5Zyo6YGl6L+c55qE5aSp6L65LG==",
"6ZO25rKz6L6557yYLH==",
"5pyJ5LiA54mH56We5aWH55qE5b2p6Jm55rW3LC==",
"5ZKM5oiR5LiA6LW35YaS6ZmpLB==",
"6aOe5ZCR5Y+m5LiA5Liq5LiW55WMLC==",
"5Zyo6YGl6L+c55qE5aSp6L65LB==",
"6ZO25rKz6L6557yYLC==",
"5pyJ5LiA54mH56We5aWH55qE5b2p6Jm55rW3LB==",
"5ZKM5oiR5LiA6LW35YaS6ZmpLH==",
"6aOe5ZCR5Y+m5LiA5Liq5LiW55WMLN==",
"c3VwZXIgbWFnaWMgd29ybGR+fg=="]
def cut(obj, sec):
    return [obj[i:i+sec] for i in range(0,len(obj),sec)]

flag=''
print(len(a))
for i in range(len(a)):
    flag+=base64_stego(a[i])
flagg=cut(flag,8)
flag=''
print(flagg)
ff=[1]*100
for i in range(len(flagg)):
    ff[i]=int(flagg[i],2)
    flag+=(chr(ff[i]))
print(flag)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值