base64实现

在这里插入图片描述

Base64编码核心思想:
每3个字节断开,拿出一个3个字节,每6个bit断开成4段。
因为每个字节其实只占用了6位, 2**6 = 64 ,因此有了base64的编码表。
每一段当做一个8bit看它的值,这个值就是Base64编码表的索引值,找到对应字符。 再取3个字节,同样处理,直到最后。
举例:
abc对应的ASCII码为:0x61 0x62 0x63
01100001 01100010 01100011 # abc
011000 010110 001001 100011
00011000 00010110 00001001 00100011 # 每6位补齐为8位
24 22 9 35

alphabet = b"ABCDEFGHJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"

def base64encode(src) -> bytes:
    ret = bytearray()
# 判断类型模块
    if isinstance(src,str): 
        _src = src.encode()
    elif isinstance(src,bytes):
        _src = src
    else:
        raise TypeError
# 切片赋值
    length = len(_src)
    for start in range(0,length,3):
        triple = _src[start:start+3]
# 最后是否有空余,然后用合适数量的‘=’补齐
        r = 3 - len(triple)
        if r:
            triple += b'\x00' * r

        b = int.format_bytes(triple,'big') # 将一个字节序转换为整数

        for i in range(18, -1, -6):
            index = b >> i if i == 18 else b >> i & 0x3F
            ret.append(alphabet[index]2)
        if r:
            ret[-r:] = b'=' * r
    return bytes
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值