模块简介
base64是将任意二进制编码成文本字符串的一种编码算法。具体请参考RFC 3548.
编码原理
base64是基于64个可打印字符来表示二进制的表示方法,其64个可打印字符为:
Table 1: The Base 64 Alphabet
Value Encoding Value Encoding Value Encoding Value Encoding
0 A 17 R 34 i 51 z
1 B 18 S 35 j 52 0
2 C 19 T 36 k 53 1
3 D 20 U 37 l 54 2
4 E 21 V 38 m 55 3
5 F 22 W 39 n 56 4
6 G 23 X 40 o 57 5
7 H 24 Y 41 p 58 6
8 I 25 Z 42 q 59 7
9 J 26 a 43 r 60 8
10 K 27 b 44 s 61 9
11 L 28 c 45 t 62 +
12 M 29 d 46 u 63 /
13 N 30 e 47 v
14 O 31 f 48 w (pad) =
15 P 32 g 49 x
16 Q 33 h 50 y
其原理是对二进制进行分组,每三个字节为一组,一个字节有8bit,这样一组就有3x8=24bit, 然后针对这个24bit重新分成4组,即4x6=24bit。这样对新划分的四个组,每个组的二进制表示值(2^6=64)作为上表的索引,即为base64编码。
char: | A | B | C |ascii: |0|1|0|0|0|0|0|1|0|1|0|0|0|0|1|0|0|1|0|0|0|0|1|1|
index:| 16 | 20 | 9 | 3 |base64:| Q | U | J | D |
从上面可以看出,经过base64编码后,3个字节的二进制长度会编码成4个字节的文本长度,长度增加了33%, 它带来的好处是可以在邮件,见面上显示。
如果待编码的二进制不是3的倍数,即最后可能剩下1个或2个字节如何处理呢?这个时候需要填充,填充规则:
末尾用0填充,再在末尾增加1个或2个"="
重要函数
先来看一下base64模块有多少可调用函数:
用得比较多的就是:
- base64.b64encode(s[, altchars])
- base64.b64decode(s[, altchars])
- base64.urlsafe_b64encode(s)
- base64.urlsafe_b64decode(s)
标准base64编码中包含"+"和"/",并不适合在url传输,url编码为把"+"和"/"编码成%XX的形式,为了解决这个问题可以用urlsafe_b64encode和urlsafe_b64decode,它会将"+"和"/"改成"-"和"_"。
实例演示
python内置base64模块非常易于使用:
>>> import base64>>> encode = base64.b64encode('ABC')>>> print encode
QUJD>>> decode = base64.b64decode(encode)>>> print decode
ABC
更多参考
[1].https://docs.python.org/2/library/base64.html
[2].http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431954588961d6b6f51000ca4279a3415ce14ed9d709000
[3].http://blog.csdn.net/morewindows/article/details/11922473