编码系列(持续更新)
Base家族
Base16
- 使用16个ASCII可打印字符(数字0-9和字母A-F),对任意字节数据进行编码。
- 先获取输入字符串每个字节的二进制值(不足8比特在高位补0),然后将其串联进来,再按照4比特一组进行切分,将每组二进制数分别转换成十进制。
- Base16编码后的数据量是原数据的两倍:1000比特数据需要250个字符(即 250*8=2000 比特)。
注: 可以看到8比特数据按照4比特切分刚好是两组,所以Base16不可能用到填充符号=
。
换句话说:Base16使用两个ASCII字符去编码原数据中的一个字节数据。
Base16编码是一个标准的十六进制字符串(注意是字符串而不是数值),更易被人类和计算机使用,因为它并不包含任何控制字符,以及Base64和Base32中的=
符号。
Base32
- Base32编码是使用32个可打印字符(字母A-Z和数字2-7)对任意字节数据进行编码的方案,编码后的字符串不用区分大小写并排除了容易混淆的字符,可以方便地由人类使用并由计算机处理。
- Base32主要用于编码二进制数据,但是Base32也能够编码诸如ASCII之类的二进制文本。
- Base32将任意字符串按照字节进行切分,并将每个字节对应的二进制值(不足8比特高位补0)串联起来,按照5比特一组进行切分,并将每组二进制值转换成十进制来对应32个可打印字符中的一个。
由于数据的二进制传输是按照8比特一组进行(即一个字节),因此Base32按5比特切分的二进制数据必须是40比特的倍数(5和8的最小公倍数)。
例如输入单字节字符%
,它对应的二进制值是100101
,前面补两个0变成00100101
(二进制值不足8比特的都要在高位加0直到8比特),从左侧开始按照5比特切分成两组:00100
和101
,后一组不足5比特,则在末尾填充0直到5比特,变成00100
和10100
,这两组二进制数分别转换成十进制数,通过上述表格即可找到其对应的可打印字符E
和U
,但是这里只用到两组共10比特,还差30比特达到40比特,按照5比特一组还需6组,则在末尾填充6个=
。填充=
符号的作用是方便一些程序的标准化运行,大多数情况下不添加也无关紧要,而且,在URL中使用时必须去掉=
符号。
Base64
- Base64是一种基于64个可打印字符来表示二进制数据的表示方法。由于 $2^6=64$ ,所以每6个比特为一个单元,对应某个可打印字符。3个字节有24个比特,对应于4个Base64单元,即3个字节可由4个可打印字符来表示。
注:BinHex的版本使用不同的64字符集来代表6个二进制数字,但是不被称为Base64。
如果要编码的字节数不能被3整除,最后会多出1个或2个字节,那么可以使用下面的方法进行处理:
- 先使用0字节值在末尾补足,使其能够被3整除,然后再进行Base64的编码。
- 在编码后的Base64文本后加上一个或两个=号,代表补足的字节数。
也就是说:
当最后剩余两个八位(待补足)字节(2个byte)时,最后一个6位的Base64字节块有四位是0值,最后附加上两个等号;
如果最后剩余一个八位(待补足)字节(1个byte)时,最后一个6位的base字节块有两位是0值,最后附加一个等号。
MD5
|
|
MD5 加密后的密文应该是 纯数字+纯字符
emoji-aes编码
- emoji-aes使用对称aes加密密码加密字符串数据,然后用emojis替换Base64输出。
|
|
词频分析
一堆文字,看着什么编码都不像的,可能是词频分析,用在线网站跑
字频分析
通常是给了一大段文字,然后用随波逐流分析就好
摩斯电码
变种很多,直接用厨子跑就行
维吉尼亚密码
一种典型的多表替换密码
给了密文和Key
直接拉到cyberchef中解密即可
给了密文,没给密钥,但是知道目标明文的格式
先用B神的脚本爆破出Key,然后再把这个Key放到cyberchef中解密
根据对照表,手搓密钥的前几位
希尔密码
已知密文和密钥,并且密钥(key)是一个网址,如http://www.verymuch.net
已知密文和密钥,并且密钥是四个数字
|
|
Rabbi密码
已知密文和密钥,密文有点像base64编码的(可能有+号)
云隐密码
特征是:密文只由01248组成
用随波逐流中的脚本直接跑
社会主义核心价值观密码
公正民主公正文明公正和谐
:abc
盲文
使用在线翻译
音乐符号
Tips:这里要注意,加密的密文一定是以=结尾的,有时候需要自己把=加上
|
|
直接用在线网站解密
Polybius密码(棋盘密码)
CTFWiki上有详细介绍,如果给了一串数字但是用16进制出不来的话,可以试一下。
埃特巴什码(Atbash)
类似于:(+w)v&LdG_FhgKhdFfhgahJfKcgcKdc_eeIJ_gFN
拉入厨子直接解密
DNA编码
使用CTFD中的DNAcode脚本解密,随波逐流里面也有。
Decabit编码
正常的 Decabit编码 是十个字符一组的,如果不是十个一组,就很可能不是 Decabit编码
|
|
在线网站解。
仿射密码
有两个key,key-a为必须是(1,3,5,7,9,11,15,17,19,21,23,25)中的一个,key-b是0~25的数字
可以使用在线网站解。
BrainFuck编码
随波逐流解。感觉和Decabit点像?
|
|
Gronsfeld密码
没遇到过什么样的,但是在网上看到了,也没给示例,就贴了一个解密脚本。不懂什么意思。
|
|
UUencode编码
AAencode编码
XXencode编码
上面三个统统拉到厨子里
snow隐写
空格和制表符组成的,并不是零宽字符,用snow解。
零宽字符隐写
应该挺好看出来的,直接在线网站解就好了。
文字盲水印
很明显的一个标志就是文本里有DEL
删除符,用PuzzleSolver解。
阴阳怪气
与佛论禅
与熊论道
天书奇谈
无字天书
中文电报(中文电码)
Quote-Printable编码
类似于下面这样的编码,直接拉进厨子解。
|
|
中文ascii码
培根密码
由 a、b 或者 A、B 或者 0、1 组成的密文,密文中只有两种字符,可以直接使用 随波逐流 解密
Tips:CyberChef 的培根密码解密可能会有点问题,这里建议用随波逐流解密。
锟斤拷
Notepad++里直接转成utf-8。
键盘坐标密码
参考moectf-2024捂住一只耳
。
福尔摩斯密码
|
|
直接网上查找福尔摩斯密码对照表即可 flag{RRRRRRE}