经常碰到Base编码,就找了一下相关资料。
Base的作用:
我们知道,一些字符在某些环境中是不能显示的。比如在url地址中,出现空格和/等字符,有可能会导致地址的错误解析。因此,我们可以用Base编码将字符转化成ASCII中的可见字符,去掉一些特殊字符,避免冲突。常见的Base编码有Base16,Base32,Base64等。
Base编码的原理:
计算机中,存储信息时,二进制码以8位(1个字节)为一组,Base编码的原理简单来说就是将二进制码以特定位重新分组,分组后形成的新数字根据对应的编码表转化成可见的,不会引起争议的ASCII字符。
Base16:
Base16 编码会将字节切为以4位一组(不够2n组补=),数据将用16个字符编码。这16个字符分别是 0-9,A-F
:
比如二进制码00001111重组为0000 1111(0 15),根据Base16编码表找到编码后数据0F。
Base32:
Base32 编码会将字节切为以5位一组。如果最后不够5位,那么就在切出的最后一组后边补0,补够5位,然后右边补=
,补够8n组。
00000001 00000011 00000111 00001111 00011111 11111111
=>
00000 00100 00001 10000 01110 00011 11000 11111
11111 11100 = = = = = =
// 最后不足5位先在右边补0,完成后再在右边补=直到补够8n组
// 分组结束后再根据编码表转化成相应字符
Base32编码表有两种:
Base64 :
Base64编码和Base32编码很类似。将字节切为6位为一组。最后不够6位补0,不够4n组补=。
Base64编码表也有两种:
其他还有Base62,Base100 等Base家族编码方式可自行搜索。
放一个在线解码网址:https://ctf.bugku.com/tools
(之后可能会手写一下这几种Base编码的代码实现,挖个坑)