data后缀文件解码_数据编码与解码:base64

本文介绍了Python的base64模块,用于二进制数据与ASCII字符之间的编码解码,包括Base16、Base32、Base64、Ascii85和Base85方法。详细讲解了新接口和旧接口的使用,如Base64编码解码、标准Base64以及URL和文件系统安全的Base64编码解码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文约1620字,建议阅读时间8~10分钟

关键字:python,二进制数据,ASCII字符,编码,base64

base64模块提供了二进制数据与ASCII字符之间编码与解码的方法(也可参见binascii模块),包括Base16、Base32、Base64、Ascii85和Base85方法。上述方法非常适合二进制数据的编码,主要用于安全电子邮件、URL或者HTTP的post请求等,但与uuencode程序不同。

basse64模块提供了两个接口。新接口支持将类字节对象编码为ASCII字节,并且提供将类字节对象或者包含ASCII码的字符串解码为字节;旧的接口不支持将字符串解码,但支持将文件对象编码和解码,且只支持Base64的标准字母表,每76个字符换行。

1、新接口

(1)Base64编码

from base64 import b64encode

data_bin=b'Winter to spring be far behind.’

b64encode(data_bin,altchars=None)

#返回b'V2ludGVyIHRvIHNwcmluZyBiZSBmYXIgYmVoaW5kLg=='

#备选参数altchars指定时必须是长度为2的类字节对象(超过2多余的字节将被忽略),用于替代+和/字符,下同

#注:输入为类字节对象,返回包含ASCII的字节串,如果想获取相应的ASCII字符串,可通过decode()方法获得

(2)Base64解码

from base64 import b64decode

data_ascii=b'V2ludGVyIHRvIHNwcmluZyBiZSBmYXIgYmVoaW5kLg=='

b64decode(data_ascii,altchars=None,validate=False)

#返回b'Winter to spring be far behind.',结果与

b64decode('V2ludGVyIHRvIHNwcmluZyBiZSBmYXIgYmVoaW5kLg==',altchars=None,validate=False)一致

#validate为False时,那些既不在base64标准字母表中也不在altchars指定的替换字符中的字符将于填充检查前被丢弃,否则为True时,将抛出binascii.Error

#注:输入必须为包含ASCII的字节或字符串,输出为字节串

(3)标准Base64编码

from base64 import standard_b64encode

standard_b64encode(data_bin)

#返回b'V2ludGVyIHRvIHNwcmluZyBiZSBmYXIgYmVoaW5kLg=='

#注:与b64encode的区别在于,当altchars参数为None时,两者结果一致

(4)标准Base64解码

from base64 import standard_b64decode

standard_b64decode(data_ascii)

#返回b'Winter to spring be far behind.'

#注:与b64decode的区别在于,当altchars参数为None,validate为False时,两者结果一致

(5)基于URL和文件系统安全字母表的Base64编码

from base64 import urlsafe_b64encode

urlsafe_b64encode(data_bin)

#返回b'V2ludGVyIHRvIHNwcmluZyBiZSBmYXIgYmVoaW5kLg=='

#注:与b64encode的区别在于,采用urlsafe方法时字母表将以”-”替换“+”,”_”替换“/”

(6)基于URL和文件系统安全字母表的Base64解码

from base64 import urlsafe_b64decode

urlsafe_b64decode(data_ascii)

#返回b'Winter to spring be far behind.'

#注:与b64decode的区别在于,采用urlsafe方法时字母表将以”-”替换“+”,”_”替换“/”

(7)Base32编码

from base64 import b32encode

b32encode(data_bin)

#返回b'K5UW45DFOIQHI3ZAONYHE2LOM4QGEZJAMZQXEIDCMVUGS3TEFY======'

(8)Base32解码

from base64 import b32decode

data_ascii=b'K5UW45DFOIQHI3ZAONYHE2LOM4QGEZJAMZQXEIDCMVUGS3TEFY======'

b32decode(data_ascii,casefold=False,map01=None)

#返回b'Winter to spring be far behind.'

#备选参数casefold表示是否接受小写字母作为输入,为了安全考虑,默认值为False

#备选参数map01不为None时,数字0将被映射为O,数字1将被映射为指定的字符,为了安全起见,默认为None,即不接受0和1作为输入

(9)Base16编码

from base64 import b16encode

b16encode(data_bin)

#返回b'57696E74657220746F20737072696E672062652066617220626568696E642E'

(10)Base16解码

from base64 import b16decode

data_ascii=b'57696E74657220746F20737072696E672062652066617220626568696E642E'

b16decode(data_ascii)

#返回b'Winter to spring be far behind.'

(11)Ascii85编码

from base64 import a85encode

a85encode(data_bin,foldspaces=False,wrapcol=0,pad=False,adobe=False)

#返回b"=(uPoATAo8D]j+?EbTE(+C\\n)Amo^&@V'4eDIb@"

#备选参数foldspaces为True时表示使用一个特殊的短序列y来代替4个连续的空间(ASCII 0x20),下同

#wrapcol控制输出是否添加换行符

#pad控制输入长度是否在编码前填充为4的倍数

#adobe控制编码后的字节序列是否在首尾添加,下同

(12)Ascii85解码

from base64 import a85decode

data_ascii=b""

a85decode(data_ascii,foldspaces=False,adobe=True,ignorechars=b'\t\n\r\v')

#返回b'Winter to spring be far behind.'

#ignorechars为忽略输入的字节字符串

(13)Base85编码

from base64 import b85encode

b85encode(data_bin)

#返回b'S7~l^WpW^NZy

b85encode(data_bin,pad=True)

#返回b'S7~l^WpW^NZy

#pad为True时,当data_bin的长度不是4的倍数时,填充b’\0’至4的倍数

(14)Base85解码

from base64 import b85decode

data_ascii=b'S7~l^WpW^NZy

b85decode(data_ascii)

#返回b'Winter to spring be far behind.'

2、旧接口

(1)二进制文件的解码

from base64 import decode

decode(input,output)

#input为二进制输入文件对象

#output为二进制数据的写入文件对象

(2)类字节的解码

from base64 import decodebytes

data_ascii=b64encode(data_bin)

decodebytes(data_ascii)

#返回b'Winter to spring be far behind.'

#注:该方法的输入必须为Base64方法的类字节编码

(3)二进制文件的编码

from base64 import encode

encode(input,output)

#input为二进制输入文件对象

#output为Base64方法编码数据的写入文件对象

(4)类字节的编码

from base64 import encodebytes

encodebytes(data_bin)

#返回b'V2ludGVyIHRvIHNwcmluZyBiZSBmYXIgYmVoaW5kLg==\n'

#注:该方法与新接口b64encode的区别在于输出中每76个字节长度后插入换行符b’\n’

(完)

c22d60341744bda48ba4d46ef6477890.png

欢迎关注【lambda派】!

相关阅读:

安全随机数字生成:secrets

gz格式压缩文件操作:gzip

路径常规操作os.path

序列化与反序列化:pickle

迭代器函数模块itertools

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值