1.
import re from functools import reduce from base64 import b64encode # 构建base 64 字符映射表 b64_alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' b64_mapping = {k: v for k, v in zip(range(64), b64_alphabet)} # 标准Base64编码 def b64_encode(bytes_string): # 判断参数类型 if not isinstance(bytes_string, (bytes, bytearray)): raise TypeError('Expected "bytes" or "bytearray" object') # 计算字节字符串长度 bytes_len = len(bytes_string) # 计算要补充的 "=" 的长度 pad_len = 3 - bytes_len % 3 if bytes_len % 3 else 0 # 规范化字节字符串,使其长度是3的整数倍 normalized_bytes_string = bytes_string + b'x00' * pad_len # 按照每3个字节一组将规范化的字节字符串进行分组 bytes_string_list = re.findall(b'.{3}', normalized_bytes_string) # 将每组中的3个字节中的每个字节用8位二进制表示,结果为由表示24位二进制数的字符串组成的数组 bin_string_list = [ reduce(lambda x, y: x + y, map(lambda h: '0' * (8 - len(bin(h).lstrip('0b'))) + bin(h).lstrip('0b'), item)) for item in bytes_string_list ] # 将表示24位二进制的字符串平均分割成四段,每段表示一个6位二进制数 b64_bin_string_list = [re.findall('.{6}', ele) for ele in bin_string_list] # 将嵌套数组扁平化处理,生成base64字符键列表 b64_key = [] for i in b64_bin_string_list: for j in i: b64_key.append(int(j, base=2)) # 根据base64字符映射表构造最终的base64编码字符串 b64_string = '' for k in b64_key: b64_string += b64_mapping[k] b64_string = b64_string[:(len(b64_string) - pad_len)] + '=' * pad_len b64_bytes_string = b64_string.encode('ascii') return b64_bytes_string # URL安全的Base64编码 def b64_urlsafe_encode(bytes_string): return b64_encode(bytes_string).replace(b'+', b'-').replace(rb'/', b'_')
https://blog.csdn.net/swinfans/article/details/89458462
2.
python 按照固定长度分割字符串的方法
# 将表示24位二进制的字符串平均分割成四段,每段表示一个6位二进制数 b64_bin_string_list = re.findall(r'.{6}',bin_string_list) print(b64_bin_string_list) # 将嵌套数组扁平化处理,生成base64字符键列表 b64_key = [] for i in b64_bin_string_list: b64_key.append(int(i, base=2)) # 根据base64字符映射表构造最终的base64编码字符串 b64_string = '' for k in b64_key: b64_string += b64_mapping[k] print(b64_string)