由ogeek2019的一道杂项题引起的思考

引言——2019wp

开局一张图,直接上stegslove,很明显,多个色道左上角有像素点,熟悉的就知道有lsb隐写

1-2

也可使用超好用的lsb分析工具zsteg

安装命令

gem install zsteg

使用命令,eg:

zsteg 2019.png

得到信息,看起来是base64

2-1
3-2

解码(QW8obWdIW11XTyxyOFVTM0dNMlIySSVZQjdzdA==

base64应该没有(,不知这道题的括号是什么意思

解出来得到字符串Ao(mgH[]WO,r8US3GM2R2I%YB7st

重点来了,当时是不知道这是什么加密,所以在收藏的一个网站里尝试

http://ctf.ssleye.com

但是有个问题就是部分编码解码是要收费的,后面听别人说这是国内最大的CTF编码平台,好用还是好用。后来发现这个编码是base85

解出来flag{~h!%3W-9jKB6\(fG}

4-2

这是个啥玩意呢,没遇到过的人很难知道。

所以本文就是在此对base家族进行一个总结

正文

以下除注明,所有编码实例均使用

flag{hello_worl_2333!}

进行演示

常见的base家族

最标准的三个就是base64、32、16,也是最常见的

Base64编码

Base64编码使用了ASCII编码中64个可打印的字符**(大写字母A-Z,小写字母a-z,数字0~9以及+,/)**将任意字节数据进行编码.Base64编码将串起来的二进制以6位进行分割.所以分切之前的二进制位数应该是24的倍数(即6,8的最小公倍数).如果不足24位,则在编码后数据后面添加=,一个=相当于6个二进制位.数据量是原先的三分之四倍。

#编码后字符串
ZmxhZ3toZWxsb193b3JsXzIzMzMhfQ==
Base32编码

Base32使用了ASCII编码中可打印的32个字符**(大写字母A-Z和数字2~7)**对任意字节数据进行编码.Base32将串起来的二进制数据按照5个二进制位分为一组,由于传输数据的单位是字节(即8个二进制位).所以分割之前的二进制位数是40的倍数(40是5和8的最小公倍数).如果不足40位,则在编码后数据补充=,一个=相当于一个组(5个二进制位),编码后的数据是原先的五分之八倍。末尾最多有6个=

#编码后字符串
MZWGCZ33NBSWY3DPL53W64TML4ZDGMZTEF6Q====
#在线解码网站
http://ctf.ssleye.com/base64.html
Base16编码

Base16编码就是将ASCII字符集中可打印的字符**(数字0-9和字母A-F)**对应的二进制字节数据进行编码,不会出现=,数据量是原先的两倍。

#编码后字符串
666C61677B68656C6C6F5F776F726C5F32333333217D
#在线解码网站
http://ctf.ssleye.com/base64.html

奇奇怪怪的base

顺序从小到大

base36编码

Base36包含0~9的数字,加上所有26个字母,不区分大小写,不包含任何标点,所有的字母要不全大写,要不全小写。所以加起来就是 “0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",或者”0123456789abcdefghijklmnopqrstuvwxyz“

特征特点:密文由36个字符(0-9,a-z)组成,加密仅支持整数数字,解密仅支持字符串,不支持中文
密文由36个字符(0-9,A-Z)

#编码前字符串(因为base36仅支持数字进行编码)
2333123456578
#编码后字符串
trtlgsoy
#在线解码网站
 http://ctf.ssleye.com/base36w.html(收费)
base58编码

base58采用的字符集为“123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ”,从这不难看出,Base58是纯数字与字母组成而且去掉了容易引起视觉混淆的字符(0:数字零,O:大写O,I:大写i,l:小写L)。9个数字+49个字母=58个。由于没有特殊字符所以在采用鼠标双击或移动设备选择时可以自动识别全选。Base58本身就是URLSafe。Base64的URFSafe模式虽然已经对URL支持的比较好,但UUID中还是包含“-或_”。目前流行的比特币,采用的就是Base58Check编码,是在Base58基础上又增加了安全效验机制。

特征特点
Base58是用于Bitcoin中使用的一种独特的编码方式,主要用于产生Bitcoin的钱包地址,Base58不使用数字”0”,字母大写”O”,字母大写”I”,和字母小写”l”,以及”+”和”/”符号

#编码后字符串
UoLFswHcCx17iFnZbLC2YCVEwnL5vc
#在线解码网站
https://www.jisuan.mobi/pbHzbBHbzHB6uSJx.html
base62编码

同样的还有 base62编码,就是26个字母的大小写再加上0-9,一共62个字符。

相比于base64只是去掉了两个在网络上不便传输的符号

特征特点:密文由62字符(0-9,a-z,A-Z)组成

#编码后字符串
419eruT2yBOTbPTTZpgI3ulf9i08Sr
#在线解码网站 
https://base62.io/(支持中文) 
http://decode-base62.nichabi.com 
http://ctf.ssleye.com/base62.html(仅支持数字、收费)
base85编码

特征特点

#编码后字符串
Ao(mgHY?u,Ci<[)DfTZ$1,C^B+aj
#在线解密网站
https://base85.io/
base91编码

特征特点:密文由91个字符(0-9,a-z,A-Z,!#$%&()*+,./:;<=>?@[]^_`{|}~”)组成

#编码后字符串
@iH<,{meFT$&|]RnBjk1AkAS=y!
#在线解码网站 
https://www.dcode.fr/base-91-encoding
http://ctf.ssleye.com/base91.html(收费)
base92编码

特征特点:穷,开不起会员测试了,暂缺,遇到了自己试试

#在线解码网站 
http://ctf.ssleye.com/base92.html(收费)

😂
其实大部分应该都是能在python库里找到现成的,不需要在线解密

eg:

>>> import base92
>>> base92.decode(base92.encode('hello world'))
'你好,世界'
>>> base92.encode('\ x61 \ xf2 \ x05 \ x99 \ x42')
'DJ8gER!'
base全家桶的安装使用方法 - pcat - 博客园
base编码是Binary-to-text encoding的一种实现方法,它可以把二进制数据(含不可打印的字符)编码成可打印字符序列。 本文会不定时收录“base全家桶”:base64、base32