base64模块

xingyun86 2018-4-18 1632

模块简介

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模块有多少可调用函数:


dir(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



×
打赏作者
最新回复 (0)
只看楼主
全部楼主
返回