参考链接:
以下有关内容基于 Python 3:
Python 简易实现 base64 编码
目录
1. 什么是 base64 编码
2. 举例说明
3. 如何用 Python 实现
4. 具体代码
5. 代码运行展示
6. 更简单的代码
7. 心得总结
一、什么是 base64 编码
↶
对于任意的二进制文件,可用 base64 编码。这种编码方法是先把二进制代码划分为一个个 24 位长的单元,然后把每一个 24 位单元划分为 4 个 6 位组。每一个 6 位组按以下方法转换为 ASCII 码。6 位的二进制码共有 64 种不同的值,从 0 到 63。用 A 表示 0,用 B 表示 1,等等。26 个大写字母排列完毕之后,接下去再排 26 个小写字母,在后面是 10 个数字。最后用 “+” 表示 62,用 “/” 表示 63。再用两个连在一起的等号 “==” 和 一个等号 “=” 分别表示最后一组的代码只有 8 位或 16 位。回车和换行都忽略,它们可在任何地方插入。 —— 摘自 《计算机网络(第7版)》
简单点说,就是每个字节变为 8 位二进制,拼在一起,其中每 6 位转变为一个 ASCII 码,不足位填充 0 直至满足 6 位的条件,继续转变为 ASCII 码。将这些二进制 ASCII 码变为十进制,接着查找 base64 编码表,所得的结果组成的字符串就是 base64 编码的结果,不足 4 的倍数,末尾添加 = 。通过 base64 编码,只需要用简单的 ascii 码,就能表示繁多的二进制文件中复杂的数据。
二、举例说明
↶
- 例-1:
- 试将数据 11001100 10000001 00111000 进行 base64 编码,并得到最后传输的 ASCII 数据。
先将 24 比特的二进制数字划分为 4 个 6 位组:
110011 001000 000100 111000,得出十进制的值 51,8,4,56。因为 6 位组的值在 0 到 63 之间,因此每一个值可以唯一地与一个 ASCII 代码相对应。
根据 base64 编码表,把上面的这些值转换为对应的 ASCII 代码:zIE4
以上的过程可以由下图表示:
再查找 ASCII 编码表,得出对应的二进制代码为:
01111010 01001001 01000101 00110100
三、如何用 Python 实现
↶
那么,该如何用 Python 实现这些步骤呢?
让我们一步一步解决问题【假设我们已经获得一个字符串】:
1. 想办法将字符串中所有的内容变为十进制
(1)ascii 码,可以直接通过内置函数完成:
>>>a = "A"
>>>b = ord(a)
>>>b
>65
(2)非 ascii 码,通过编码:
>>>a = '哔哩哔哩弹幕网'
>>>b = a.encode('utf-8')
>>>b
>b'\xe5\x93\x94\xe5\x93\xa9\xe5\x93\x94\xe5\x93\xa9\xe5\xbc\xb9\xe5\xb9\x95\xe7\xbd\x91'
可以得到一连串的 16 进制码,\x
后面的两个字符,就是十六进制后的结果。
接下来,我们就要尝试把这些 16 进制的内容,变为十进制数字,用内置函数 list 直接转换为十进制列表:
<