首页 > 编程语言 >Python 标准类库-因特网数据处理之Base64数据编码

Python 标准类库-因特网数据处理之Base64数据编码

时间:2023-05-28 10:33:17浏览次数:43  
标签:类库 数据编码 Base64 字节 编码 Python 解码 base64 input

该模块提供将二进制数据编码为可打印ASCII字符并将这种编码解码回二进制数据的功能。它为RFC 3548中指定的编码提供编码和解码功能。定义了Base16、Base32和Base64算法,以及事实上的标准Ascii85和Base85编码。

RFC 3548 编码适用于对二进制数据进行编码,以便可以安全地通过电子邮件发送,用作URL的一部分,或作为HTTP POST请求的一部分。编码算法与uuencode程序不同。

该模块提供了两个接口。现代接口支持将字节类对象(bytes-like-objects)编码为ASCII字节,并将字节类对象或者包含ASCII的字符串转为字节。支持 RFC 3548 中定义的所有base64字母表。

遗留接口不支持从字符串解码,但它提供了与文件类对象之间的编码和解码功能。它只支持Base64标准字母表,并根据RFC 2045每76个字符添加换行符。

Python 3.3版本中变更:现代接口的解码功能所接受只有ASCII的Unicode字符串。

Python 3.4版本中变更:该模块中的所有编码和解码功能所接受任何字节类对象。增加了Ascii85/Base85支持。

现代接口

  • base64.b64encode(s, altchars=None)

    使用Base64对字节类对象 s进行编码,并返回编码后的字节。

    altchars 可选参数,必须是长度至少为2的字节类对象(多余的字符会被忽略),参数中给定字符按序分别用于替换编码后的字符集中的+/,等价于使用base64.urlsafe_b64encode(s) 。这允许应用程序生成例如URL或文件系统安全的Base64字符串。默认值为None,使用标准的Base64字母表。

  • base64.b64decode(s, altchars=None, validate=False)

    解码Base64编码的字节类对象或ASCII字符串 s,并返回解码后的字节。

    altchars 可选参数,必须是字节类对象或长度至少为2的ASCII字符串(多余的字符会被忽略),按序分别用于替换解码前s中与+, /的替代字符为+/,等价于base64.urlsafe_b64decode(s) 。如果未正确提供 s 值,将引发binascii.Error异常。

    validate 如果为False(默认值),则在填充检查前,将丢弃既不在标准 Base64 字母表之中也不在备用字母表中的字符。如果为True,这些非base64字符将导致binascii.Error

  • base64.standard_b64encode(s)

    使用标准Base64字母表对字节类对象 s 进行编码,并返回编码后的字节

  • base64.standard_b64decode(s)

    使用标准Base64字母表对字节类对象 s 进行解码,并返回解码后的字节

  • base64.urlsafe_b64encode(s)

    使用 URL 与文件系统安全的字母表编码字节类对象s,使用 - 以及 _ 分别代替标准 Base64 字母表中的 +/。返回编码后的字节。结果中可能包含 =

  • base64.urlsafe_b64decode(s)

    使用 URL 与文件系统安全的字母表解码字节类对象 s,使用 - 以及 _ 分别代替标准 Base64 字母表中的 +/。返回解码后的字节。

  • 查看参考官方文档,获取更多现代接口

示例

#!/usr/bin/env python
# -*- coding:utf-8 -*-

import base64

str = 'param1=a>2&url=http://www.example.com/?type=1'
byte_obj = str.encode()
# print(byte_obj) # 输出:b'param1=a>2&url=http://www.example.com/?type=1'
print(base64.b64encode(byte_obj))
#输出:b'cGFyYW0xPWE+MiZ1cmw9aHR0cDovL3d3dy5leGFtcGxlLmNvbS8/dHlwZT0x'

encoded_obj = base64.b64encode(byte_obj, altchars=b'-_')
print(encoded_obj)
#输出:b'cGFyYW0xPWE-MiZ1cmw9aHR0cDovL3d3dy5leGFtcGxlLmNvbS8_dHlwZT0x'

print(base64.b64decode(encoded_obj, altchars=b'-_'))
#输出:b'param1=a>2&url=http://www.example.com/?type=1'
#print(base64.b64decode(encoded_obj))
#报错 binascii.Error: Incorrect padding

print(base64.b64decode(str)) # 输出:b'\xa5\xaa\xda\x9bV\xb6\xba\xb9'


str2 = 'hello Mr授客'
byte_obj2 = str2.encode('utf-8')
encoded_obj2 = base64.standard_b64encode(byte_obj2)
print(encoded_obj2) # 输出:b'aGVsbG8gTXLmjojlrqI='
print(base64.standard_b64decode(encoded_obj2).decode('utf-8')) # 输出:hello Mr授客


encoded_obj3 = base64.urlsafe_b64encode(byte_obj)
print(encoded_obj3)
#输出:b'cGFyYW0xPWE-MiZ1cmw9aHR0cDovL3d3dy5leGFtcGxlLmNvbS8_dHlwZT0x'

print(base64.urlsafe_b64decode(encoded_obj3))
#输出:b'param1=a>2&url=http://www.example.com/?type=1'

历史接口

  • base64.decode(input, output)

    解码二进制input文件的内容,并将生成的二进制数据写入output文件。inputoutput必须是文件类对象。input将被读取,直到input.readline()”返回一个空字节对象。

  • base64.decodebytes(s)

    解码字节类型对象ss必须包含一行或多行base64编码的数据,并返回解码后的字节。3.1版新增。

  • base64.decodestring(s)

    decodebytes()的别名,3.1版本中废弃。

  • base64.encode(input, output)

    对二进制input文件的内容进行编码,并将生成的base64编码数据写入output文件。inputoutput必须是文件类对象。input将被读取,直到input.read()返回一个空字节对象。base64.encode()output的每76个字节后插入一个换行符(b'\n'),并确保output始终以换行结束,如RFC 2045 所示(MIME)。

  • base64.encodebytes(s)

    对可以包含任意二进制数据的字节类对象 s 进行编码,并返回包含base64编码的字节数据。base64.encode()在输出的每76个字节后插入一个换行符(b'\n'),并确保输出始终以换行结束。

    版本3.1中新增

  • base64.encodestring(s)

    encodebytes()别名,版本3.1中废弃。

示例

#!/usr/bin/env python
# -*- coding:utf-8 -*-

import base64

# 注意:必须以二进制文件打开、写文件,否则会报错
with open('./input.txt', 'rb') as input:
    with open('output.txt', 'wb') as output:
        base64.encode(input, output)
        
base64_byte_data = b'cGFyYW0xPWE+MiZ1cmw9aHR0cDovL3d3dy5leGFtcGxlLmNvbS8/dHlwZT0x'
print(base64.decodebytes(base64_byte_data))
#输出:b'param1=a>2&url=http://www.example.com/?type=1'

print(base64.encodebytes(b'param1=a>2&url=http://www.example.com/?type=1'))
#输出:b'cGFyYW0xPWE+MiZ1cmw9aHR0cDovL3d3dy5leGFtcGxlLmNvbS8/dHlwZT0x\n'

标签:类库,数据编码,Base64,字节,编码,Python,解码,base64,input
From: https://www.cnblogs.com/shouke/p/17437871.html

相关文章

  • python自学笔记
    变量类型:整型int,字符串str,浮点型float;算术运算:+、-、*、/、%、**(乘方)、//(整除);逻辑运算:not、and、or;布尔类型:True、False;比较运算:>、>=、<、<=、==、!=;变量命名规则:字母+数字+下划线、区分大小写、数字不开头、不能用空格、不能用保留字;输入input()、输出print();字符串拼接:prin......
  • python3异常处理
    1、语法错误和异常语法错误是在代码执行前可以检测的,由于不符合代码语法规范引起的异常指程序运行过程中导致的超出预期处理能力的情况常见的异常:0作为除数未定义的对象被直接使用,比如参与运算或者调用其属性和方法str类型直接和非str类型相加输入输出与系统异常等异常有两......
  • python3 \r和\n
    1、说明\n:换行符,跳到下一行\r:回车,跳到当前行的首部,\r会占据一个字符长度windows下enter是\r\n; linux/unix下是\n; mac下是\r网络协议的头部字段间隔也是\r\n2、比较分析print('abc123zzz')print('abc\n123\rzzz\n1234\r',end='')print('000')""&quo......
  • python3反射
    脚本语言系列之Python|Python反射-知乎(zhihu.com)1、基本使用hasattr(obj,name_str)判断输入的name_str字符串在对象obj中是否存在(属性或方法),存在返回True,否则返回False。getattr(obj,name_str)将按照输入的name_str字符串在对象obj中查找,如找到同名属性,则返回该......
  • python3多线程
    1、线程和进程计算机资源,指的是cpu计算资源、内存资源、接口读写资源等。进程:计算机中用于分配资源的最小个体。不同进程之间并不共享内存。线程:是进程内部的资源分配对象,一个进程最少会有一个线程。同一进程下的不同线程可以共享内存。2、并行和并发并行:同一时间段,交替前行。并......
  • python输出列表索引
    输出列表索引列表的索引输出方法较为简单>>>a=[1,2,3,4,5,6]>>>a.index(2)1>>>#此处的列表a是一个没有重复元素的列表,所以输出的2索引就是1(因为python)的索引是从0开始计起>>>#假如对于一个列表中指定的元素不单一,输出的结果是怎么样的>>>b=[11,2,11,12,33,12]>......
  • python3函数
    1、介绍def函数名(参数列表):函数体在python中,可以直接在.py文件中,通过关键字def创建函数。2、函数与解释型python是解释型编程语言,从上到下解析,所以在调用函数时,该函数必须已经被声明。如果是在函数B声明之前,py文件中直接调用B,那么pycharm会提示异常如果是在函数B声明......
  • 全国计算机二级python考试学习信息 二级python考试练习习题 二级python考试资料 二级p
    Python加入计算机考试多久了计算机考试的全名叫做全国计算机等级考试,它每年考试的时间和开放的科目也是不同的。Python这个编程语言是在2018年的9月才加入全国计算机等级考试二级之中的,以前只有C、Java、C++等语言是作为考试科目的。Python列为国家等级考试的意义主要有以下几......
  • Python协程:从yield/send到yield from再到async/await
    Python中的协程大概经历了如下三个阶段:最初的生成器变形yield/send引入@asyncio.coroutine和yieldfrom在最近的Python3.5版本中引入async/await关键字一、生成器变形yield/send普通函数如果出现了yield关键字,那么该函数就不再是普通函数,而是一个生成器。importrandom......
  • Python连接es笔记一之连接与查询es
    本文首发于公众号:Hunter后端原文链接:Python连接es笔记一之连接与查询es有几种方式在Python中配置与es的连接,最简单最有用的方法就是定义一个默认的连接,如果系统不是需要访问多个集群,最建议的方式就是使用create_connection方法创建连接,然后所有的操作都会自动使用这个连......