二进制
数据传输和存储基本都是都采用了二进制形式进行的.
比如我们此时需要传输数据abcdef,转为二进制就是:
01100001 01100010 01100011 01100100 01100101 01100110
base64加密原理
1 | 3*8 -------> 4*6 |
Base64编码将3个字节的二进制数据组合成4个ASCII字符。每个ASCII字符由6个比特位表示,因此每个Base64字符包含6个比特位。如果二进制数据的字节数不是3的倍数,编码过程中会进行填充。
base64加密过程
我们以abcd为例:
首先转为二进制:
01100001 01100010 01100011 01100100
每3个字节的二进制数据为一组,分为4个6位数据:
011000 010110 001001 100011
不足三个字节补零然后继续:01100100 00000000 00000000(最后化作==)此时由于数据是以8位存储,所以再把它恢复成8位:
011000 ——->00011000
010110 ——->00010110
001001 ——->00001001
100011 ——->00100011
得到00011000 00010110 00001001 00100011
4.对照base64编码表还原:
00011000 00010110 00001001 00100011分别化为10进制
00011000 —–> 24
00010110 —–> 22
00001001 —–>9
00100011 —–> 35
对应下表:
YWJj
关于不足三位的
还是上面的abcd,在补零后,我们得到:
01100100 00000000 00000000
补了几个字节,就有几个=
按照正常步骤化为
00011001 00000000 00000000 00000000
刚刚我们补了两个八位,因此最后两组0为==
前面两个字符对照base64表:ZA
因此为 ZA==
abcd经过base64编码得到 YWJjZA==
编码完后与在线编码对照:
特点
1.base64字符串长度可以被4整除.
每3个字节变为4个6位数据
2.标准base64只有64个字符(英文大小写、数字和+、/)以及用作后缀等号
转化为6位的数据进行转换的,6位最大为00111111(0~63)
同样也因为只有64个字符,叫base64
ctf中的应用
1.给你base64加密的数据进行解密,
直接调用函数就可以
2.在加密过程中将64个字符重新排序,你需要找到新定义的base64表进行解密.逆向题:simple_RE.
找一个base64加密解密的代码,将编码表替换