base64原理

先简单介绍一下base64解密:

(图片来源见水印,侵删)

base64使用 a-zA-Z0-9+/ 等64个字符来替换掉所有字符,同时使用 = 来替换掉空格,既然一共有64个字符,那么每个字符只需要6位即可表示出来,使用的64个字符如下:

例如,原本的3个字节的数据经过编码后需要4个字节来表示:3*8 = 4*6;可以看出,只有二进制位数恰好是8和6的倍数才可以刚好用这64位表示。

那如果位数不是8和6的公倍数怎么办呢?——方法就是在二进制数串后面加0,一直到二进制位数变成6的倍数,然后在编码后的字符串后面添加 1 个或 2 个等号”=”, 表示所添加的零值字节数。参考下图:

base64解密

解密过程是这样的:

首先把已经加密的字符串后面的等号(=)去掉,然后从左到右,每8位一组,剩余的不足8位的丢掉,再每组二进制串按照转换表转换成相应字符。

以上图为例:

VHIweQ== 变成 VHIweQ(01010100 | 01110010 | 00110000 | 01111001 | 0000)变成 01010100 | 01110010 | 00110000 | 01111001 | 变成 Tr0y

base64隐写

从上面的解密过程中可以看出,多余的4位(标红的4个0)在解密的时候并没有用到,也就是说,无论后四位是0000还是0001,解密结果都没有改变,这就提供了一个可以隐藏信息的地方。如下图;

那么,怎么判断有没有信息被隐藏进去了呢?

假设我们已经把后四位0000变成了0001,现在我们得到的加密后的字符串是VHIweR==,利用python中base64的解密函数直接解密后得到Tr0y,然后用base64的加密函数加密,得到的是VHIweQ==;

这时候我们就可以发现,按照正常加密流程加密得到的VHIweQ==,跟原始的字符串VHIweR==是不一样的,这就说明有信息被隐藏在了里面。

例题(攻防世界base64stego)

得到的一个加密文本是stego.txt:

把所有文本解密后发现得到一段话,并没有什么有用信息,参考题目,考虑base64隐写,附上脚本:(适用于python2情况)

其中

  • zfill()方法,返回指定长度的字符串,原字符串右对齐,前面填充0
  • index()方法,指定字符串中是否含有要查找的子字符串,返回包含子字符串开始处的索引值,否则抛出异常
def get_base64_diff_value(s1, s2):base64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'res = 0for i in xrange(len(s1)):if s1[i] != s2[i]:return abs(base64chars.index(s1[i]) - base64chars.index(s2[i]))return resdef solve_stego():with open('D:/stego.txt', 'rb') as f:file_lines = f.readlines()bin_str = ''for line in file_lines:steg_line = line.replace('\n', '')norm_line = line.replace('\n', '').decode('base64').encode('base64').replace('\n', '')diff = get_base64_diff_value(steg_line, norm_line)pads_num = steg_line.count('=')if diff:#print bin(diff)bin_str += bin(diff)[2:].zfill(pads_num * 2)else:bin_str += '0' * pads_num * 2res_str = ''for i in xrange(0, len(bin_str), 8):res_str += chr(int(bin_str[i:i+8], 2))print res_strsolve_stego()

运行后得到:

base64隐写(攻防世界杂项base64stego)相关推荐

  1. 攻防世界(杂项篇MISC)---base64stego

    攻防世界-base64stego 文章目录 攻防世界---base64stego 题目 用的的知识 base64 base64编码实现 base64解码实现 总结 伪加密 无加密 真加密 base64 ...

  2. Misc 第七篇——base64stego(伪加密,base64隐写)

    题目描述:菜狗经过几天的学习,终于发现了如来十三掌最后一步的精髓 附件给了一个压缩包,伪加密,使用360解压缩成功解压. 解压后是一个文本文件,如下图,使用base64加密的一堆字符串, 单纯使用ba ...

  3. 攻防世界杂项(misc)--新手练习区(详解十二道题完结,附件做题过程中使用到的各种工具和网站)

    攻防世界杂项(misc)–新手练习区(详解) 第一题:this_is_flag 题目描述:Most flags are in the form flag{xxx}, for example:flag{ ...

  4. 攻防世界-杂项-Misc

    长期更新一波 攻防世界 的杂项题解 这东西主要靠积累吧 攻防世界:https://adworld.xctf.org.cn 新手练习区 1.this_is_flag 题目直接给出了 flag 2.ext ...

  5. 20220207-CTF-MISC-第11题--- base64隐写--附带脚本

    攻防世界- MISC新手区–第11题–base64隐写 下载之后解压,是stego.txt 打开stego.txt 显然是base64编码之后的结果,base64解码,我还百度翻译了一下,也没什么发现 ...

  6. MISC | base64隐写

    前言 懒狗一个,最近打比赛才知道还有base64隐写,有很多大师傅已经记录了原理,这里简单写一下. base64 base64编码就是用64个ascii字符作为基础来编码二进制内容的一种编码方式.编码 ...

  7. 密码学-->base64隐写

    base64隐写 先复习一下base64 加密解密的方式: 这里是引用 Base64是一种基于64个可打印字符表示二进制数据的表示方法,其一大特点是能够将不可打印字符编码为可打印字符. 这里是引用 B ...

  8. 攻防世界-MISC:base64stego

    这是攻防世界新手练习区的第十一题,题目如下: 点击下载附件一,发现是一个压缩包,点击解压,发现是需要密码才能解密 先用010editor打开这个压缩包,这里需要知道zip压缩包的组成部分,包括压缩源文 ...

  9. 攻防世界杂项高手区3-11解题(详细)

    考点: LSB隐写 文件类型的敏感判断 base64加密 stegsolve的使用 (如果不会使用放个链接学一下https://blog.csdn.net/weixin_52620919/articl ...

最新文章

  1. Google出品,EfficientNet在目标检测达到最新SOTA | CVPR 2020
  2. 我的世界最新版本生存服务器ip,我的世界服务器古风小阁IP|纯净生存(1.15.2)
  3. count时结果 hive_hive的count(distinct id)测试--慎用
  4. 笔记-项目人力资源管理
  5. laravel8 模型自定义方法_Laravel 8.14.0 发布,PHP Web 开发框架
  6. 吴军:我们之所以高估一些事情,源于认知
  7. 信息学奥赛一本通(1075:药房管理)
  8. Node.js 爬虫初探
  9. lol更新显示正在连接服务器,wegame更新游戏显示正在连接服务器
  10. 机器学习实战(第1章)
  11. STM32利用AES加密数据、解密数据
  12. php模板开发教程,discuz模板开发教程系列教程整理
  13. Code Review应该关注哪些点?
  14. 国开本科计算机应用基础操作题,新版国家开放大学中央电大本科计算机应用基础操作题题库...
  15. 用Python控制摄像头拍照并发邮件
  16. 新堂NUC505开发板第一炮-启动篇
  17. 年会活跃微信群小游戏有哪些?塔防小游戏经典玩法讲解
  18. socket.py line224 in meth return getattr(self._sock, name)(*args) error:[Error 2] No such file or di
  19. 哈尔滨理工大学软件与微电子学院程序设计竞赛 H.Maze
  20. 前端CryptoJS和Java后端数据互相加解密(AES)

热门文章

  1. cic曲线是什么_cic.是什么意思
  2. 【软考系统架构设计师】2018下系统架构师综合知识历年真题
  3. UART转232通讯出错(MAX232和MAX3232混用导致错误)
  4. Hanlp使用过程中报错 RuntimeError: The MPS backend is supported on MacOS 12.3+.
  5. java 文件上传怎么知道是否成功_java ,上传成功怎么接收回执信息判断是否上传成功?...
  6. wpa_supplicant.conf文件详解
  7. ret2xx----- Pwn中常见的CTF模板命题
  8. Style2paints:专业的AI漫画线稿自动上色工具
  9. 星网锐捷语音服务器,星网锐捷SVG6008 语音网关接入设备 SIP协议 MGCP协议
  10. UVA 116 Unidirectional TSP (白书dp)