没有技术含量,只有胡思乱想
如题,这次想的是将图像转换为Base64,但是目的不是把有几个M的图片压缩成只有几KB的文本,而只是随便想着玩的
起因是在随波逐流工作室的CTF工具合集网址上面看到了一个图片转Base64的网址,感觉有点意思,就随便上传了个图片试了一下
结果…网站不支持200KB以上的图片,晕倒…
后面传了个符合大小的图片上去,给是给了Base64,但是…
说白了就是直接把文件直接Base64了(那我为什么不用厨子做),本来还想着有没有什么好玩的,可惜了
一段时间后,想到图片信息其实就只有宽高和像素的颜色这么一点,然后这些信息其实都可以用数字直接表示
于是,一个很简单直接的想法出现了:
为什么不用文本表示宽高和像素信息然后再对得到的文本Base64呢?
我们假设有一张1920*1080的RGB图片记为img,那么我们随机提取其中的任意像素pix,都有:
1 | pix=(r,g,b) |
其中r,g,b均为0~255的其中一个整型数值
由于本人比较懒,所以决定得到的Base64编码前的字符串按3个3个分隔
但是这样的话图片最大就只有255*255了,那怎么办呢…那我们用16进制而非10进制不就行了
这样宽高信息最大就有4095*4095了,当然这个可以自行变更,只是我个人一般用不上这么大的图而已
所以理论上最后得到的字符串应该是这样的:
1 | raw_text="(width,base=16)(height,base=16)(pix1[0],base=10)(pix1[1])(pix1[2])(pix2[0])..." |
其中每个括号里面的字符串长度都为3
得到了raw_text之后再Base64一下就行了,解码就Base64解码然后按照上面的思路提取宽高和像素信息,最后生成图片就结束了
就这么简单,所以直接上代码:
1 | import base64 |
至于为啥搞了个Base64换表,大概是一时兴起吧,这种换不换都无所谓的啦~~(怎么你换表还带塞4个音游曲的?)
本意是想出一道简单的Python代码审计和脚本编写的题目的(就是给new_b64.txt和加密脚本,自己根据加密脚本写解密脚本),但是可能有点太厄厄了(就和AuroraCTF第二道Blockchain一样),所以就给一下思路就结束了
就这样吧,睡觉了,好困QωQ
- 本文作者: 9C±Void
- 本文链接: https://cauliweak9.github.io/2023/11/12/胡思乱想/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!