详解Python中使用base64模块来处理base64编码的方法

作者:zhaoweikid 时间:2022-01-12 01:27:19 

base64模块是用来作base64编码解码的。这种编码方式在电子邮件中是很常见的。
它可以把不能作为文本显示的二进制数据编码为可显示的文本信息。编码后的文本大小会增大1/3。

闲话不说了,base64模块真正用的上的方法只有8个,分别是encode, decode, encodestring, decodestring, b64encode,b64decode, urlsafe_b64decode,urlsafe_b64encode。他们8个可以两两分为4组,encode,decode一组,专门用来编码和 解码文件的,也可以对StringIO里的数据做编解码;encodestring,decodestring一组,专门用来编码和解码字符串; b64encode和b64decode一组,用来编码和解码字符串,并且有一个替换符号字符的功能。这个功能是这样的:因为base64编码后的字符除 了英文字母和数字外还有三个字符 + / =, 其中=只是为了补全编码后的字符数为4的整数,而+和/在一些情况下需要被替换的,b64encode和b64decode正是提供了这样的功能。至于什 么情况下+和/需要被替换,最常见的就是对url进行base64编码的时候。urlsafe_b64encode和urlsafe_b64decode 一组,这个就是用来专门对url进行base64编解码的,实际上也是调用的前一组函数。

基本用法
首先准备一个64个字符的数组[‘A','B','C', … , ‘1', ‘2', … , ‘+']
然后对二进制数据进行处理, 每三个字节(byte)一组, 一共是3x8=24, 划为4组,每组6bit.这样我们得到4个数字作为索引, 然后查表获得相应的4个字符, 就是编码后的字符串.
如果编码的二进制数不是3的倍数怎么办,base64在\x00在末尾不足后,在代码的末尾添加1~2个=号,解码是自动去掉


import base64

me = base64.b64encode("mink")
print me            # print 'bWluaw=='

会把少的字符用=号补上


print base64.b64decode(me)   # print 'mink'

可以解码得到原有的字符串

urlsafe_b64encode 和 urlsafe_b64decode

base64的还提供用于url的编码方法urlsafe_b64encode 和urlsafe_b64decode.


me = base64.urlsafe_b64encode('i\xb7\x1d\xfb\xef\xff')
print me            # print 'abcd--__'

print base64.urlsafe_b64decode(me) print 'abcd++//'

因为base64编码后+和-可能会出现在字符中,所以通过urlsafe的方法把+转换为-,/转化为_.

由于=字符也可能出现在Base64编码中,但=用在URL Cookie里面会造成歧义,很多Base64编码后会把=去掉.去掉=后怎么解码呢?因为Base64是把3个字节变为4个字节,所以Base64编码的长度永远是4的倍数.因此需要加上=把Base64字符串的长度变为4的倍数,就可以正常解码了.

综合示例


#-*- encoding:gb2312 -*-
import base64
import StringIO

a = "this is a test"
b = base64.encodestring(a) # 对字符串编码
print b
print base64.decodestring(b) # 对字符串解码

c = StringIO.StringIO()
c.write(a)
d = StringIO.StringIO()
e = StringIO.StringIO()
c.seek(0)
base64.encode(c, d) # 对StringIO内的数据进行编码
print d.getvalue()
d.seek(0)
base64.decode(d, e) # 对StringIO内的数据进行解码
print e.getvalue()

a = "this is a +test"
b = base64.urlsafe_b64encode(a) # 进行url的字符串编码
print b
print base64.urlsafe_b64decode(b)


上面的encode函数和decode函数的参数其实还可以是文件对象的,那的象这样:


f1 = open('aaa.txt', 'r')
f2 = open('bbb.txt', 'w')

base64.encode(f1, f2)

f1.close()
f2.close()
标签:Python,base64
0
投稿

猜你喜欢

  • Python数学建模StatsModels统计回归模型数据的准备

    2021-10-08 09:19:24
  • PHP中单引号和双引号的区别详解

    2023-05-25 08:16:51
  • Python绘制分类图的方法

    2021-08-10 04:09:13
  • DW MX 的快键一览表

    2009-07-21 12:47:00
  • 推荐4个原生javascript常用的函数

    2024-02-23 09:05:41
  • Python中的is和id用法分析

    2021-12-09 17:23:12
  • Python使用matplotlib 画矩形的三种方式分析

    2022-04-06 05:49:17
  • Oracle 函数大全

    2024-01-16 06:13:24
  • python的类class定义及其初始化方式

    2023-08-07 11:52:15
  • 协同开发巧用gitignore中间件避免网络请求携带登录信息

    2022-10-24 13:20:00
  • Python简易版图书管理系统

    2022-06-07 21:11:10
  • 如何用Matplotlib 画三维图的示例代码

    2023-03-02 15:16:08
  • pytorch-神经网络拟合曲线实例

    2022-03-17 18:17:30
  • 使用python绘制温度变化雷达图

    2021-06-23 05:44:02
  • python线程信号量semaphore使用解析

    2023-02-08 08:47:24
  • SQLServer2019 数据库的基本使用之图形化界面操作的实现

    2024-01-18 04:30:15
  • 在sql查询中使用表变量

    2024-01-23 10:25:59
  • Pycharm无法显示动态图片的解决方法

    2023-01-29 23:13:42
  • plt.subplot()参数及使用介绍

    2022-03-23 09:17:03
  • Python后台开发Django的教程详解(启动)

    2023-03-25 19:00:10
  • asp之家 网络编程 m.aspxhome.com