当前位置:   article > 正文

Python base64

python base64

一、base64可用函数集合

base64方法是成套的,即encode编码/decode解码

__all__ = [
    'encode',        # 编码后为字符型
    'decode', 
    'encodebytes',   # 编码后为字节型
    'decodebytes',
    'b64encode',     # 64位编码后为字符型
    'b64decode', 
    'b32encode',     # 32位编码后为字符型
    'b32decode',
    'b16encode',     # 16位编码后为字符型 
    'b16decode',
    'b85encode', 
    'b85decode', 
    'a85encode', 
    'a85decode',
    'standard_b64encode',  # 标准的64位编码
    'standard_b64decode',
    'urlsafe_b64encode',   # 当编码后,用于url参数时,可用此方法,因为url中有特须字符处理机制< '=' 为 '%3D' >
    'urlsafe_b64decode',
    ]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

二、函数详情

2-1 base64.encode()与base64.decode()

encode:对文件进行编码;输入和输出都是二进制文件
decode:对文件进行解码;输入和输出都是二进制文件

2-1-1 源代码

def encode(input, output):   # input, output都是二进制文件
    """Encode a file; input and output are binary files.""" 
    while True:
        s = input.read(MAXBINSIZE)  # input必须是open(xxx,'rb')对象
        if not s:
            break
        while len(s) < MAXBINSIZE:
            ns = input.read(MAXBINSIZE-len(s))
            if not ns:
                break
            s += ns
        line = binascii.b2a_base64(s)
        output.write(line)  # output必须是open(xxx,'wb')对象
        
def decode(input, output):
    """Decode a file; input and output are binary files."""
    while True:
        line = input.readline()  # 按行读取文件内容
        if not line:
            break
        s = binascii.a2b_base64(line)
        output.write(s)  # 写入新文件中
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

2-1-1 使用实例

对图片文件123.png编码,并输出到456.txt文件中

import base64
base64.encode(open('123.png', 'rb'), open('456.txt', 'wb')) # 编码
base64.decode(open('456.txt', 'rb'), open('789.png', 'wb')) # 解码
# encode与decode两个参数只接受二进制,所以open必须指定为'b'表示字节
  • 1
  • 2
  • 3
  • 4

生成456.txt文件内容
在这里插入图片描述

2-2 base64.b64encode()与base64.b64decode

b64encode:对二进制数据进行编码成字符串,适用于64位编码
b64decode:把字符串解码成二进制数据,适用于64位编码

2-2-1 源码

def b64encode(s, altchars=None):
    encoded = binascii.b2a_base64(s, newline=False)
    if altchars is not None:
        assert len(altchars) == 2, repr(altchars)
        return encoded.translate(bytes.maketrans(b'+/', altchars))
    return encoded
    
def b64decode(s, altchars=None, validate=False):
    s = _bytes_from_decode_data(s)
    if altchars is not None:
        altchars = _bytes_from_decode_data(altchars)
        assert len(altchars) == 2, repr(altchars)
        s = s.translate(bytes.maketrans(altchars, b'+/'))
    if validate and not re.fullmatch(b'[A-Za-z0-9+/]*={0,2}', s):
        raise binascii.Error('Non-base64 digit found')
    return binascii.a2b_base64(s)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

2-2-2 实例

encoded = base64.b64encode(open('123.png', 'rb').read()) # 将二进制数据编码成base64字符串
print(encoded)

decode = base64.b64decode(encoded) # 将base64字符串解码成二进制数据
print(decode)
open('abc.png', 'wb').write(decode) # 写入文件
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

在这里插入图片描述
在这里插入图片描述

2-3 base64.b32encode()与base64.b32decode

与b64encode/b64decode 同义,b64encode就是b32encode一种扩展

2-4 base64.urlsafe_b64encode()与base64.urlsafe_b64decode

现在网络上传/下载图片,在传递过程中把图片转换为base64字符串,但是作为url参数传递时,由于url中会转义<如:‘=’ 转换为 ‘%3D’>这样就改变了base64字符串内容,urlsafe_b64encode可以避免这种情况发生
urlsafe_b64encode:二进制数据编码为字符串
urlsafe_b64encode:字符串解码为二进制数据

2-4-1 源码

def urlsafe_b64encode(s):
    return b64encode(s).translate(_urlsafe_encode_translation)

def urlsafe_b64decode(s):
    s = _bytes_from_decode_data(s)
    s = s.translate(_urlsafe_decode_translation)
    return b64decode(s)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

2-4-2 传输网络图片

import requests
res = request.get('https://www.baidu.com' + file_path)
encoded = base64.urlsafe_b64encode(res.content)

## 假如django后台
def str_json()
	res = request.get('https://www.baidu.com' + file_path)
	encoded = base64.urlsafe_b64encode(res.content)
	return JsonResponse{'image_str': encoded }

# 显示图片用urlsafe_b64decode解码
decoded = base64.urlsafe_b64decode(encoded)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/177238
推荐阅读
相关标签
  

闽ICP备14008679号