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中可见