手动实现 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("测试"))
View Code

 

posted @ 2025-08-04 23:27  inks  阅读(7)  评论(0)    收藏  举报