编码系列

Misc中各种奇葩编码

编码系列(持续更新)

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比特切分成两组:00100101,后一组不足5比特,则在末尾填充0直到5比特,变成0010010100,这两组二进制数分别转换成十进制数,通过上述表格即可找到其对应的可打印字符EU,但是这里只用到两组共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个字节,那么可以使用下面的方法进行处理:

  1. 先使用0字节值在末尾补足,使其能够被3整除,然后再进行Base64的编码。
  2. 在编码后的Base64文本后加上一个或两个=号,代表补足的字节数。

也就是说:

当最后剩余两个八位(待补足)字节(2个byte)时,最后一个6位的Base64字节块有四位是0值,最后附加上两个等号;

如果最后剩余一个八位(待补足)字节(1个byte)时,最后一个6位的base字节块有两位是0值,最后附加一个等号。

MD5

1
2
3
4
5
6
明文:admin
32位小写21232f297a57a5a743894a0e4a801fc3 
32位大写21232F297A57A5A743894A0E4A801FC3 
16位小写7a57a5a743894a0e 
16位大写7A57A5A743894A0E 
Tips:十六位其实就是取32位的8-24位

MD5 加密后的密文应该是 纯数字+纯字符

emoji-aes编码

  • emoji-aes使用对称aes加密密码加密字符串数据,然后用emojis替换Base64输出。
1
2
3
Message: flag
Key: f@1g
encryption: 🙃💵🌿🎤🚪🌏🐎🥋🚫😆😍🚫🌊📮🐘🖐🌉🥋✉🕹🎃☂🎤🎈🥋🐘✅🌪🕹🍌👌🎅🚨☃☀🕹🍵📂😆😍😁📂❓🗒

emoji-aes

词频分析

一堆文字,看着什么编码都不像的,可能是词频分析,用在线网站

字频分析

通常是给了一大段文字,然后用随波逐流分析就好

摩斯电码

变种很多,直接用厨子跑就行

维吉尼亚密码

一种典型的多表替换密码

  1. 给了密文和Key

    直接拉到cyberchef中解密即可

  2. 给了密文,没给密钥,但是知道目标明文的格式

    先用B神的脚本爆破出Key,然后再把这个Key放到cyberchef中解密

  3. 根据对照表,手搓密钥的前几位

希尔密码

解密网站

已知密文和密钥,并且密钥(key)是一个网址,如http://www.verymuch.net

已知密文和密钥,并且密钥是四个数字

1
2
密文:exky
密钥:11 45 1 4

Rabbi密码

已知密文和密钥,密文有点像base64编码的(可能有+号)

云隐密码

特征是:密文只由01248组成

用随波逐流中的脚本直接跑

社会主义核心价值观密码

解密网址

公正民主公正文明公正和谐abc

盲文

使用在线翻译

音乐符号

Tips:这里要注意,加密的密文一定是以=结尾的,有时候需要自己把=加上

1
eg:♭♯♪‖¶♬♭♭♪♭‖‖♭♭♬‖♫♪‖♩♬‖♬♬♭♭♫‖♩♫‖♬♪♭♭♭‖¶∮‖‖‖‖♩♬‖♬♪‖♩♫♭♭♭♭♭§‖♩♩♭♭♫♭♭♭‖♬♭‖¶§♭♭♯‖♫∮‖♬¶‖¶∮‖♬♫‖♫♬‖♫♫§=

直接用在线网站解密

Polybius密码(棋盘密码)

CTFWiki上有详细介绍,如果给了一串数字但是用16进制出不来的话,可以试一下。

埃特巴什码(Atbash)

类似于:(+w)v&LdG_FhgKhdFfhgahJfKcgcKdc_eeIJ_gFN

拉入厨子直接解密

DNA编码

使用CTFD中的DNAcode脚本解密,随波逐流里面也有。

Decabit编码

正常的 Decabit编码 是十个字符一组的,如果不是十个一组,就很可能不是 Decabit编码

1
+-+-++–+- ++—+-++- -+–++-++- +–++-++– –+++++— ++-++—+- +++-+-+— +-+-+—++ —+++-++- -+–++-++- -+–+++-+- -+–++-++- -+–++-++- ++-+-+-+– -+–+++-+- ++-++—+- -++++—+- -+–++-++- ++-+-+-+– +-+++—+- +++-++—- —+++-++- +-+-+—++ ++-+-+-+– +-+-+–++- ++–+–++- -++++—+- +—+++-+- ++-+-+-+– -++++—+- -+–+++-+- +–+-+-++- +++-+-+— +-+++—+- -+–+-+++- -+–++-++- —+++-++- ++++—-+- -++++—+- -+–+++-+- -+–++-++- —-+++++-

在线网站解。

仿射密码

有两个key,key-a为必须是(1,3,5,7,9,11,15,17,19,21,23,25)中的一个,key-b是0~25的数字

可以使用在线网站解。

BrainFuck编码

随波逐流解。感觉和Decabit点像?

1
+++++ +++[- >++++ ++++< ]>++. <++++ +++[- >++++ +++<] >++.< +++[- >---< ]>--- .+++. ----- ---.< +++++ [->-- ---<] >---- ----. <++++ [->++ ++<]> +.<++ +[->- --<]> ----- .<+++ ++++[ ->+++ ++++< ]>+++ +.<++ +++++ [->-- ----- <]>-- ----. <++++ +[->+ ++++< ]>+++ +.<++ ++++[ ->--- ---<] >---- --.<+ ++[-> +++<] >+.<+ ++++[ ->+++ ++<]> +++++ .<+++ ++[-> ----- <]>-- -.<++ ++++[ ->+++ +++<] >++++ ++++. +++++ +++.< ++++[ ->--- -<]>- ----. <++++ [->++ ++<]> .<+++ ++++[ ->--- ----< ]>--- ----- ----- -.++. .<+++ ++++[ ->+++ ++++< ]>+++ +++.+ ++.-. <+++[ ->--- <]>-- ----. <++++ ++[-> ----- -<]>- ----- ----. ++++. <++++ ++[-> +++++ +<]>+ +++++ .<+++ +++[- >---- --<]> ----- ---.< +++[- >+++< ]>+++ ++.<+ ++[-> ---<] >---. <++++ ++[-> +++++ +<]>. <++++ ++[-> +++++ +<]>. <

Gronsfeld密码

没遇到过什么样的,但是在网上看到了,也没给示例,就贴了一个解密脚本。不懂什么意思。

1
2
3
4
5
6
7
8
# 解密脚本
from pycipher import Gronsfeld

cipher = 'TGLBOMSJNSRAJAZDEZXGHSJNZWHG'
key = [1,50,61,8,9,20,63,41]
secret = Gronsfeld(key).decipher(cipher)

print(secret)

UUencode编码

AAencode编码

XXencode编码

上面三个统统拉到厨子里

snow隐写

空格和制表符组成的,并不是零宽字符,用snow解。

零宽字符隐写

应该挺好看出来的,直接在线网站解就好了。

文字盲水印

很明显的一个标志就是文本里有DEL删除符,用PuzzleSolver解。

阴阳怪气

与佛论禅

与熊论道

天书奇谈

无字天书

中文电报(中文电码)

Quote-Printable编码

类似于下面这样的编码,直接拉进厨子解。

1
2
3
flag{ichunqiu_=E6=8A=80=E6=9C=AF=E6=9C=89=E6=B8=A9=E5=BA=A6}

flag{ichunqiu_技术有温度}

中文ascii码

培根密码

由 a、b 或者 A、B 或者 0、1 组成的密文,密文中只有两种字符,可以直接使用 随波逐流 解密

Tips:CyberChef 的培根密码解密可能会有点问题,这里建议用随波逐流解密。

锟斤拷

Notepad++里直接转成utf-8。

键盘坐标密码

参考moectf-2024捂住一只耳

福尔摩斯密码

1
·-· ·-· ·-· ·-· ·-· ·-· ·

直接网上查找福尔摩斯密码对照表即可 flag{RRRRRRE}

手机九宫格键盘密码

网站总访客数:Loading
网站总访问量:Loading
使用 Hugo 构建
主题 StackJimmy 设计