二进制

数据传输和存储基本都是都采用了二进制形式进行的.
比如我们此时需要传输数据abcdef,转为二进制就是:

01100001 01100010 01100011 01100100 01100101 01100110

base64加密原理

1
3*8   ------->   4*6

Base64编码将3个字节的二进制数据组合成4个ASCII字符。每个ASCII字符由6个比特位表示,因此每个Base64字符包含6个比特位。如果二进制数据的字节数不是3的倍数,编码过程中会进行填充。

base64加密过程

我们以abcd为例:

  1. 首先转为二进制:

    01100001 01100010 01100011 01100100

  2. 每3个字节的二进制数据为一组,分为4个6位数据:

    011000 010110 001001 100011
    不足三个字节补零然后继续:01100100 00000000 00000000(最后化作==)

  3. 此时由于数据是以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加密解密的代码,将编码表替换