base64编码和解码
- 原理
- 计算机中,每个字节是8位的二进制数
- base64编码中,每一个8位的二进制数中只有后6位时有效字节,其他用0填充。
- 正常编码转成base64编码,满足3 * 8 = 24 = 4 * 6。即每3个字节的正常编码可以转成由4个字节组成的正常编码。
- base64编码表
编码图解:(参考维基百科)
- 3位的字节转成4位的base64字节
- 2位的字节转成4位的base64字节,注意:补等号=
- 1位的字节转成4位的base64字节,注意:补等号
简单代码实现Python例子
def xdd_base64():
"""
base64,编码和解码
:return:
"""
strbase64 = b'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
dictbase64 = {
k:i for i,k in enumerate(strbase64)}
dictbase64[b"="[0]] = 0
def base64Encode(stt:str)->bytes:
"""
base64 编码,将字符串转成 base64格式的字符串
:param stt:
:return:
"""
bstt = stt.encode(encoding="utf-8")
k = 0
count = len(bstt)
barr = bytearray()
for i in range(3,count,3):
units = bstt[k:i]
barr.extend(getBytearry(units))
k = i
else:
if k<count:
num = k-count+3
endunits = bstt[k:] +b"\x00"*num
barr.extend(getBytearry(endunits))
if num : barr[-num:] = b"=" * num
return bytes(barr)
def getBytearry(nuits:bytes)->bytearray:
"""
将3个8位的字节,转成4个6位的字节
:param nuits:
:return:
"""
barr = []
barrint = int.from_bytes(nuits,