Python下Base64编码

在Python下有Base64编码的库,可直接用,我自己写了个,主要是想调整编码字符的顺序。注意:如果只是想调整最后两个字符(默认为"+/"),用不着自己写,b64encode有个altchars参数,用来指定最后两个字符。先将代码放在这里,有需要的可以直接拿来用。


_keyStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='

def b64encode(s):
res = []
leftover = len(s) % 3
for i in range(0, len(s)-leftover, 3):
c2 = ord(s[i])
c1 = ord(s[i+1])
c0 = ord(s[i+2])
res.append(_keyStr[(c2 >> 2) & 0x3f])
res.append(_keyStr[((c2 & 0x3) << 4) | ((c1 >> 4) & 0x0f)])
res.append(_keyStr[((c1 & 0x0f) << 2) | ((c0 >> 6) & 0x03)])
res.append(_keyStr[c0 & 0x3f])
i += 3
if leftover == 1:
c2 = ord(s[i])
res.append(_keyStr[(c2 >> 2) & 0x3f])
res.append(_keyStr[(c2 & 0x3) << 4])
res.append(_keyStr[-1])
res.append(_keyStr[-1])
elif leftover == 2:
c2 = ord(s[i])
c1 = ord(s[i+1])
res.append(_keyStr[(c2 >> 2) & 0x3f])
res.append(_keyStr[((c2 & 0x3) << 4) | ((c1 >> 4) & 0x0f)])
res.append(_keyStr[(c1 & 0x0f) << 2])
res.append(_keyStr[-1])
return ''.join(res)

def b64decode(s):
res = []
end = len(s)
if s[-1] == _keyStr[-1]:
end -= 4
for i in range(0, end, 4):
c3, c2, c1, c0 = _keyStr.index(s[i]), _keyStr.index(s[i+1]), _keyStr.index(s[i+2]), _keyStr.index(s[i+3])
res.append(chr(((c3 << 2)) | ((c2 >> 4) & 0x03)))
res.append(chr(((c2 & 0x0f) << 4) | ((c1 >> 2) & 0x0f)))
res.append(chr(((c1 & 0x03) << 6) | (c0 & 0x03f)))
if end < len(s):
if s[-2] == _keyStr[-1]:
c3, c2 = _keyStr.index(s[end]), _keyStr.index(s[end+1])
res.append(chr(((c3 << 2)) | ((c2 >> 4) & 0x03)))
else:
c3, c2, c1 = _keyStr.index(s[end]), _keyStr.index(s[end+1]), _keyStr.index(s[end+2])
res.append(chr(((c3 << 2)) | ((c2 >> 4) & 0x03)))
res.append(chr(((c2 & 0x0f) << 4) | ((c1 >> 2) & 0x0f)))
return ''.join(res)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值