base64编码与python

python的base64模块

python下的base64模块主要有8个方法

encode,
decode,
encodestring,
decodestring,
b64encode,
b64decode,
urlsafe_b64decode,
urlsafe_b64encode

  • encode,decode:用来编码和 解码文件的,也可以对StringIO里的数据做编解码
  • encodestring,decodestring:用来编码和解码字符串
  • b64encode和b64decode:用来编码和解码字符串,并且有一个替换符号字符的功能 urlsafe_b64encode
  • urlsafe_b64decode:这个就是用来专门对url进行base64
    编解码的,其实际调用了b64encode和b64decode。

编码解码字符串

>>> import base64
>>> s='abcd'
>>> base64.encodestring(s)
'YWJjZA==\n'
>>> x = base64.encodestring(s)
>>> base64.decodestring(x)
'abcd'

编码解码文件

f1 = open('aaa.txt', 'r')
f2 = open('bbb.txt', 'w')
base64.encode(f1, f2)
f1.close()
f2.close()

urlsafe编码

>>> url='http://www.361way.com'
>>> base64.urlsafe_b64encode(url)
'aHR0cDovL3d3dy4zNjF3YXkuY29t'
>>> x=base64.urlsafe_b64encode(url)
>>> len(x)
28
>>> base64.urlsafe_b64encode('http://www.361way.com/t')
'aHR0cDovL3d3dy4zNjF3YXkuY29tL3Q='
>>> base64.urlsafe_b64decode(x)
'http://www.361way.com

等号处理
从上面的图中我们可以看出base64编码里有两个特殊的字符+/(ASCII码128个,base编码64个)。而=号是为了补全位能被4整除,因为Base64是把3个字节变为4个字节,
所以,Base64编码的长度永远是4的倍数
那这个等号能不能去掉呢?因为等号在URL、cookie里可能会有歧义。实际上是可以的,但需要计算处理,可以进行如下封装:

def b64_url_decode(str):
    return base64.b64decode(str+'='*(4-len(str)%4))
def b64_url_encode(scode):
    return base64.urlsafe_b64encode(str(scode)).rstrip('=')

举个栗子

>>> s='abcd'
>>> base64.encodestring(s)
'YWJjZA==\n'
>>> def b64_url_decode(str):
...     return base64.b64decode(str+'='*(4-len(str)%4))
...
>>> b64_url_decode('YWJjZA')
'abcd'
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值