Base64隐写

隐写原理

直接上图便于理解:

Lucy经过Base64编码后的值为THVjeQ==

同时可以看到在编码过程中补了4个0。其实可以通过后面的等号来判断有没有填充0。一个等号相当于填充了两个0。在解码过程中等号直接被丢弃,同时通过等号的个数去除填充的0从而解码。

由于填充的0在解码时会被丢弃,那么就意味着这些填充的0,其实可以不按规则都填充0,可以是0,1的任意组合,对解码不产生影响。

正常情况编码为THVjeQ==

隐写情况编码为THVjeV==

总结来说就是隐藏的信息夹在在这些填充位上。因此我们需要将这些隐藏的信息提取出来。

信息提取

由上面的内容可知,隐藏的信息被夹在填充位上,而我们又可以通过"="来判断哪些字符串在编码过程中有填充,而填充的位数又等于"="的2倍。将所有夹在的信息汇总为二进制串在解码为对应的Ascii码值就可以得到隐藏的信息了。

代码如下:

import string

base64chars=string.ascii_uppercase+string.ascii_lowercase+string.digits+"+/"
bins=""
def getSecret(s):
    global bins
    six_bin=""
    countZero=0
    for item in s:
        if item=="=":
            countZero+=1
        else:
            six_bin += bin(int(base64chars.index(item)))[2:].zfill(6)
    bins+=six_bin[-(countZero*2):]
with open("flag.txt","r") as f:
    lines=f.readlines()
    for line in lines:
        line=line.strip()
        if line.count("="):
            getSecret(line)
    s=""
    for i in range(0,len(bins),8):
        s+=chr(int(bins[i:i+8],2))
    print(s)

运行结果

题目:

题目

总结

运行结果后面的信息其实是由于编码时填充的0所导致的,不影响我们知道结果。但是对于整体来说不能以填充时全0就代表没有隐藏信息,因为它所隐藏的其实是二进制串。

参考文章

[MISC]Base64隐写-优快云博客

一篇文章彻底弄懂Base64编码原理-优快云博客

### Base64复原方法 Base64编码是一种常见的二进制到文本的转换方式,通常用于在网络上传输数据。然而,在某些情况下,攻击者可能会利用Base64编码中的冗余空间来藏信息。为了恢复被嵌入的信息,可以采用以下几种技术。 #### 方法一:分析Base64字符串长度 由于标准Base64编码会将每3个字节的数据映射成4个字符,并且在最后可能填充`=`号以保持长度为4的倍数。如果发现某个Base64字符串不符合常规模式,则可能存在额外信息。可以通过去除填充符并尝试解码来看看是否有异常情况发生[^1]。 #### 方法二:检测非标准字符集 正常的Base64只包含字母表中的特定字符(A-Z, a-z, 0-9以及+/)。任何超出此范围的字符都可能是故意加入用来传递秘密消息的一部分。因此,扫描整个Base64串寻找不属于上述集合内的字符可以帮助定位潜在的秘密信息[^2]。 #### 方法三:基于统计学的方法 对于更复杂的术来说,即使使用了合法的Base64字符也可能存在规律性的变化。通过收集大量样本建立模型,对比待测对象与正常分布之间的差异度量来进行判断是否存在蔽通道的可能性[^3]。 ```python import base64 def check_base64_padding(encoded_string): padding_count = encoded_string.count('=') decoded_bytes = base64.b64decode(encoded_string).hex() print(f"Padded with {padding_count} '=' characters.") print(f"Decoded hex string: {decoded_bytes}") encoded_data = "SGVsbG8gd29ybGQ=" # Example input check_base64_padding(encoded_data) ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值