2023.10.22
Base32的简介
Base32就是包括大写字母
A-Z
,数字2-7
组成的32个字符的字符集,另外包括填充字符=
任何符号都可以转换成这个字符集中的字符,这个转化过程就叫做Base32编码
Base32实现方式
Base32 编码的原理是将 8个比特位的二进制数据分成 5个一组每组转换为一个 32 进制的字符。如果最后一组不足5个比特位,则在末尾补 0,直到达到 5个比特位。如果二进制数据的长度不是8的倍数,则在末尾补 0,直到达到8的倍数,所以分割之后的二进制位数是40的倍数
编码表
0 | A | 16 | Q |
1 | B | 17 | R |
2 | C | 18 | S |
3 | D | 19 | T |
4 | E | 20 | U |
5 | F | 21 | V |
6 | G | 22 | W |
7 | H | 23 | X |
8 | I | 24 | Y |
9 | J | 25 | Z |
10 | K | 26 | 2 |
11 | L | 27 | 3 |
12 | M | 28 | 4 |
13 | N | 29 | 5 |
14 | O | 30 | 6 |
15 | P | 31 | 7 |
编码过程
以 flag 为例
f | l | a | g | |||||
ASCII二进制 | 01100110 | 01101100 | 01100001 | 01100001 | ||||
合并 | 01100110011011000110000101100111 | |||||||
5bit为一组 且总长度为40的倍数 | 01100 | 11001 | 10110 | 00110 | 00010 | 11001 | 11000 | 00000 |
对应编码表索引 | 12 | 25 | 22 | 6 | 2 | 25 | 24 | |
对应编码表字符 | M | Z | W | G | C | Z | Y | = |
转换结果 | MZWGCZY= |
解密脚本实现:
import base64
def base32_decode(ciphertext):
return base64.b32decode(ciphertext.encode('utf-8')).decode()