使用Python的Base64数据编码

Base64 Data Encodings using Python

base64模块中的功能将二进制数据转换为适合使用纯文本协议传输的ASCII子集。

编码和解码功能实现RFC 3548中的规范,该规范定义了Base16,Base32和Base64算法,以及事实上的标准Ascii85和Base85编码。 RFC 3548编码适合对二进制数据进行编码,以便可以安全地通过电子邮件发送,用作URL的一部分或包含在HTTP POST请求中。

此模块提供的现代接口将类似字节的对象编码为ASCII字节,并将类似字节的对象或包含ASCII的字符串解码为字节。支持以下RF??C 3548中定义的base-64字母(普通,URL和文件系统安全)。

现代界面提供-

base64.b64encode():使用Base64对类似字节的对象进行编码,并返回编码后的字节。

base64.b64decode():对Base64编码的类似字节的对象或ASCII字符串s进行解码,并返回解码后的字节。

为了演示bse64模块的b64encode()和base64desode()函数,让我们首先对Python字符串进行编码。

1
2
3
4
5
>>> import base64
>>> string = 'Python programming'
>>> enc_string = string.encode()
>>> enc_string
b'Python programming'

使用b64encode()函数对该字节对象进行编码

1
2
3
>>> b64_estring = base64.b64encode(enc_string)
>>> b64_estring
b'UHl0aG9uIHByb2dyYW1taW5n'

我们可以使用decode()函数从该字节对象中获取字符串。

1
2
3
>>> dec_string = b64_estring.decode()
>>> dec_string
'UHl0aG9uIHByb2dyYW1taW5n'

encode()函数返回字节对象

1
2
3
>>> b1 = dec_string.encode()
>>> b1
b'UHl0aG9uIHByb2dyYW1taW5n'

要使用b64decode()函数进行解码-

1
2
3
>>> d = base64.b64decode(b1)
>>> d
b'Python programming'

通过解码以上字节对象最终获得原始字符串

1
2
3
>>> originalstring = d.decode()
>>> originalstring
'Python programming'

base64字母可以使用+和/,如果在URL中使用,则必须使用替代编码来替换那些字符。

urlsafe_b64encode():使用URL和文件系统安全字母对类似于字节的对象s进行编码,该字母用-代替-代替+和_代替标准Base64字母表中的/,并返回编码的字节。

urlsafe_b64decode():使用URL和文件系统安全字母对类似字节的对象或ASCII字符串s进行解码,该字母用-代替+和_代替标准Base64字母表中的/,并返回解码后的字节。

旧版界面提供了用于编码和解码文件对象的功能-

base64.encode(input,output):对二进制输入文件的内容进行编码,并将生成的base64编码数据写入输出文件。输入和输出必须是文件对象。输入将被读取,直到input.read()返回一个空字节对象为止。

base64.decode(input,output):解码二进制输入文件的内容,并将生成的二进制数据写入输出文件。输入和输出必须是文件对象。输入将一直被读取,直到input.readline()返回一个空字节对象为止。

首先,使用" wb"模式创建文件

1
2
3
>>> f1 = open('file.txt','wb')
>>> f1.write('Simple is better than complex'.encode())
>>> f1.close()

现在使用base64.encode方法对文件进行编码。

1
2
3
4
5
>>> f1 = open('file.txt','rb')
>>> f2 = open('file.dat','wb')
>>> base64.encode(f1,f2)
>>> f1.close()
>>> f2.close()

如果在记事本中打开,则fil.dat会显示以下内容

1
U2ltcGxlIGlzIGJldHRlciB0aGFuIGNvbXBsZXg=

要解码filenew.txt中的file.dat,请使用define()函数

1
2
3
4
5
>>> f1 = open('file.dat','rb')
>>> f2 = open('filenew.txt','wb')
>>> base64.decode(f1,f2)
>>> f1.close()
>>> f2.close()

原始文本应在filenew.txt中可见