【MISC】BASE系列加密解析

见到了一题比较离谱的base64题目,VNCTF2022-Web-gocalc0,可能是我太菜的原因,明明hint告诉我,flag在session里面,我却怎样都Base64出不来,一直说解密出错。
这题对于Web没有一点难度,姑且放在MISC分类里面。

Base16

使用字符:数字(0 ~ 9),字母(A ~ F)
Base16先获取输入字符串每个字节的二进制值(不足8bit在高位补0),然后将其串联进来,再按照4bit一组进行切分(2^4=16),将每组二进制数分别转换成十进制,并对应下述编码。
即二进制转十六进制,对应下表

编码 编码 编码 编码
0 0 4 4 8 8 12 C
1 1 5 5 9 9 13 D
2 2 6 6 10 A 14 E
3 3 7 7 11 B 15 F

Base32

使用字符:数字(2 ~ 7),字母(A ~ Z),填充(=)
排除了视觉上容易混淆的字符,因此可以准确的人工录入,例如1(I),8(B),0(O)
Base32先获取输入字符串每个字节的二进制值(不足8bit在高位补0),然后将其串联进来,再按照5bit一组进行切分(2^5=32),将每组二进制数分别转换成十进制,并对应下述编码。
Base32按5bit切分的二进制数据必须是40bit的倍数(5和8的最小公倍数)
例如只用到两组共10bit,还差30bit达到40bit,按照5bit一组还需6组,则在末尾填充6个"=",但是一般来说可以省去
对应下表

编码 编码 编码 编码
0 A 8 I 16 Q 24 Y
1 B 9 J 17 R 25 Z
2 C 10 K 18 S 26 2
3 D 11 L 19 T 27 3
4 E 12 M 20 U 28 4
5 F 13 N 21 V 29 5
6 G 14 O 22 W 30 6
7 H 15 P 23 X 31 7
填充 =

Base64

使用字符:数字(0 ~ 9),字母(A ~ Z),字母(a ~ z),符号(+,/),后缀(=)
Base64先获取输入字符串每个字节的二进制值(不足8bit在高位补0),然后将其串联进来,再按照6bit一组进行切分(2^6=64),将每组二进制数分别转换成十进制,并对应下述编码。
由于二进制数据是按照8bit一组进行传输,因此Base64按照6bit一组切分的二进制数据必须是24bit的倍数(6和8的最小公倍数)
24bit就是3个byte,若原字节序列数据长度不是3的倍数时且剩下1个输入数据,则在编码结果后加2个=;若剩下2个输入数据,则在编码结果后加1个=

编码 编码 编码 编码
0 A 16 Q 32 g 48 w
1 B 17 R 33 h 49 x
2 C 18 S 34 i 50 y
3 D 19 T 35 j 51 z
4 E 20 U 36 k 52 0
5 F 21 V 37 l 53 1
6 G 22 W 38 m 54 2
7 H 23 X 39 n 55 3
8 I 24 Y 40 o 56 4
9 J 25 Z 41 p 57 5
10 K 26 a 42 q 58 6
11 L 27 b 43 r 59 7
12 M 28 c 44 s 60 8
13 N 29 d 45 t 61 9
14 O 30 e 46 u 62 +
15 P 31 f 47 v 63 /

Base58

使用字符:数字(除0),大写字母(除O,I),小写字母(除l)
base58编码相比于base64编码去掉了几个看起来会产生歧义的字符以及不方便选择的字符(+,/)
因为58不是2的整次幂,所以没有使用类似base64编码中使用直接截取3个字符转4个字符(2^6=64)的方法进行转换,而是采用我们数学上经常使用的进制转换方法——辗转相除法
本质上,base64编码是64进制,base58是58进制

编码 编码 编码 编码
0 1 15 G 30 X 45 n
1 2 16 H 31 Y 46 o
2 3 17 J 32 Z 47 p
3 4 18 K 33 a 48 q
4 5 19 L 34 b 49 r
5 6 20 M 35 c 50 s
6 7 21 N 36 d 51 t
7 8 22 P 37 e 52 u
8 9 23 Q 38 f 53 v
9 A 24 R 39 g 54 w
10 B 25 S 40 h 55 x
11 C 26 T 41 i 56 y
12 D 27 U 42 j 57 z
13 E 28 V 43 k
14 F 29 W 44 m

Base85,91,92,100编码

这些编码不太常用,等到什么时候见到了就来填

发布者

正汰

永远是这样,山前面是山,天空上面是天空,道路前面还是道路,迷茫之后还有迷茫。

发表回复

您的电子邮箱地址不会被公开。