前段时间看了某篇报纸文章,讲解在 Python 中编码 Base64 的程序。然而那片文章完全只是调用 base64
这个包。Python 调包是相当方便,但是这样除了调包还是调包,根本达不到锻炼编码能力的效果。用人单位招人面试可不看你怎么调包,很多都是自己要手撕实现的。现在的 IT 开发岗位就是这么卷。
这里研究一下在 Python 怎么手动实现 Base 编码。
要求:使用 Python 语言实现一个函数 base64(src)
,参数是一个字符串,返回的也是一个字符串,是参数中的字符串经过 Base64 编码得到的编码后的字符串。禁止使用 import
。
- Base64 是一种编码方式(不是加密方式),将二进制编码为 64 字符串组成的字符码,因此需要先将 ASCII 码(表示 0 - 127 数值范围)先转为二进制数字,再对二进制编码
- Base64 表示了从 0 ~ 63 数值,有 64 个字符(2 的 6 次方是 64,所以是 64 个字符),由 A - Z,a - z,0 - 9,+, / 这 64 个字符组成的(还有一个表示后缀的字符
=
) - Base64 把每三个 8 Bit 的字节转换为四个 6 Bit 的字节(8 和 6 的最小公倍数是 24),也就是说,转换后的字符串理论上将要比原来的长 1 / 3,转换前的 ASCII 码字符长度如果不是 3 的倍数,需要将转换二进制数字末尾补 0
示例:
- 解码的过程:去掉 Base64 字符末尾的
=
。剩下的 Base64 字符,转为二进制数字,每 8 个 bit 组成一个字节,最后剩余不足 8 位的丢弃即可 - Base64 字符对应表
索引 | 对应字符 | 索引 | 对应字符 | 索引 | 对应字符 | 索引 | 对应字符 | 索引 | 对应字符 | 索引 | 对应字符 |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | A | 10 | K | 20 | U | 30 | e | 40 | o | 50 | y |
1 | B | 11 | L | 21 | V | 31 | f | 41 | p | 51 | z |
2 | C | 12 | M | 22 | W | 32 | g | 42 | q | 52 | 0 |
3 | D | 13 | N | 23 | X | 33 | h | 43 | r | 53 | 1 |
4 | E | 14 | O | 24 | Y | 34 | i | 44 | s | 54 | 2 |
5 | F | 15 | P | 25 | Z | 35 | j | 45 | t | 55 | 3 |
6 | G | 16 | Q | 26 | a | 36 | k | 46 | u | 56 | 4 |
7 | H | 17 | R | 27 | b | 37 | l | 47 | v | 57 | 5 |
8 | I | 18 | S | 28 | c | 38 | m | 48 | w | 58 | 6 |
9 | J | 19 | T | 29 | d | 39 | n | 49 | x | 59 | 7 |
60 | 8 | 61 | 9 | 62 | + | 63 | / |
程序:
1 | def base64(src): |
测试:
1 | print(base64('abcde')) # 输出:YWJjZGU= |