Python 搞定Base64 编码/ 解码

本文介绍了Base64编码的核心思想,详细解释了如何将字节转化为Base64编码,包括处理不同字节数的情况以及特殊字符如反引号的处理。接着,文章展示了Base64解码的步骤,通过示例说明如何从Base64编码还原回原始字节。最后,讨论了代码实现中的效率问题,并指出使用Python内置的base64模块的简便性。
摘要由CSDN通过智能技术生成

Base64 编码核心思想 :

  • 每3个字节断开, 拿出一个3字节, 每6个断开, 成4段
  • 因为每个字节其实只占了6位, 2**6 = 64, 因此有了base64的编码表
  • 每一位当做一个8位看它的值, 这个值就是Base64编码表的索引值(0 ~ 63), 找到对应的字符

下面我们来考虑以下情况:

  • 一个字节能变成几个Base64 的字节 ?
  • 两个字节能变成几个Base64 的字节 ?
  • 字符串 ‘`’ 反引号如何处理 ?

根据上图编码方式不难总结 : ASCII 码一字节可以变成Base64编码2字节, 两字节变成3 字节, 反引号是1字节, 8位被断开, 前6位一组, 余下后2 位
末尾的处理 :

  • 正好是3自己处理方式同上
  • 剩下1 字节或者 2个字节, 用0 补满3 个字节
  • 全部补0 的字节用 “=” 表示
  • 但是这里注意一下, 补零的特殊情况, 例如只有一字节(ASCII码), 需要用0 再补两字节, 这样可以正好转换成Base64编码4 字节, 末尾两字节是后补的0 可以正常用 “=” 补齐(上图中n3, n4 位置), 但是注意n2 位置如果有b1 位置余下的 "0"和后来补齐的零是不同的0, 就不能直接用 "="表示了, 需对应Base64 编码表里的0 索引表示, 也就是 A

代码设计

alphabet = b'ABCDEFGHIJKLMNOPORSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'

def base64code(src:str):
    ret = bytearray()
    if isinstance(src, str):
        _src = src.encode()
    else:
        return
    lenth = len(_src)   # bytes

    offset = 0
    for offset in range(0, lenth, 3):	# 三位一组
        triple = _src[offset:offset+3]

        r = 3 - len(triple)
        if r:	# 不足三位补0
            triple += b'\x00'*r

        x 
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值