手动实现 demo
手动模拟一边编码过程 明白过程 代码全部 python实现
Base64
# base64 原理 def toB64(str_ct: str) -> str: str_ct = str_ct.encode("utf-8") print(str_ct) BASE64_TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" wd = "" # 展示一组案例 for c in str_ct: print(c, format(c, "08b")) wd += format(c, "08b") print("合并:", wd) # 计算是否填充等号 padEqual = "=" * (len(wd) % 3) # 6个字节一组 不够用补0 padZero = "0" * (6 - len(wd) % 6) wd += padZero val = "" for i in range(0, len(wd), 6): seg = wd[i:i + 6] idx = int(seg, 2) val += BASE64_TABLE[idx] print("seg:", seg, "idx:", idx, "val:", BASE64_TABLE[idx]) print("输出结果:", val + padEqual) return val + padEqual # toB64("1") # toB64("测试内容") # 优化位运算符 def toBase64(str_ct: str) -> str: str_ct = str_ct.encode("utf-8") BASE64_TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" # 每次取3字节 val = "" for i in range(0, len(str_ct), 3): check = str_ct[i:i + 3] pad = (3 - len(check)) # 不足补0 check += b"\x00" * pad num = (check[0] << 16) + (check[1] << 8) + check[2] # 0, 6 ,12 , 18 char1 = BASE64_TABLE[num >> 18 & 0x3f] char2 = BASE64_TABLE[num >> 12 & 0x3f] char3 = BASE64_TABLE[num >> 6 & 0x3f] if pad < 2 else "=" char4 = BASE64_TABLE[num >> 0 & 0x3f] if pad < 1 else "=" val += char1 + char2 + char3 + char4 return val # print(toBase64("1")) print(toBase64("测试"))

浙公网安备 33010602011771号