不用 Python 的 base64 标准库,如何自己实现一个 Base64 编码函数?
什么是 Base64
Base64 是一种用 64 个可打印字符表示任意二进制数据的编码方法,常用于文本场景下嵌入或传输二进制数据,如邮件附件、HTML 图片等。Base64 不是加密方法。
字符集为 ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
,对应 0~63。
Base64 原理
每 3 字节(24 位)数据编码为 4 个 Base64 字符。若数据长度不是 3 的倍数,需用 \x00
补齐,编码后用 =
表示补齐字节数。
- 剩 1 字节:补 2 字节,编码后末尾 2 个字符为
=
; - 剩 2 字节:补 1 字节,编码后末尾 1 个字符为
=
。
Python 实现 Base64 编码
chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
def base64_encode(binary_data: bytes):
padding_count = 3 - len(binary_data) % 3
if padding_count == 3:
padding_count = 0
encode_data = binary_data + b'\x00' * padding_count
result = ''
for index in range(0, len(encode_data), 3):
piece = encode_data[index:index+3]
binary_string = bin(int.from_bytes(piece, 'big'))[2:].zfill(24)
for i in range(0, 24, 6):
result += chars[int(binary_string[i:i+6], base=2)]
if padding_count:
result = result[:-padding_count] + '=' * padding_count
return result.encode('ascii')