Base64 编码 和 解码

Base64是把3个字节变为4个字节,所以,Base64编码的长度永远是4的倍数

import base64
# base64 编码 接收的参数只能是字节
a = base64.b64encode("哈哈".encode("utf-8"))
print(a)
# 输出结果: b'5ZOI5ZOI'

b = base64.b64decode(a)
print(b)
# 输出结果: b'\xe5\x93\x88\xe5\x93\x88'
print(b.decode("utf-8"))
# 输出结果: 哈哈


c = base64.b64encode(b'i\xb7\x1d\xfb\xef\xff')
print(c)
# 输出结果: b'abcd++//'

d = base64.urlsafe_b64encode(b'i\xb7\x1d\xfb\xef\xff')
print(d)
# 输出结果: b'abcd--__'

print(base64.b64encode(b"abcd--__"))

e = base64.urlsafe_b64decode('abcd--__')
print(e)
# 输出结果: b'i\xb7\x1d\xfb\xef\xff'

Python base64模块真正用的上的方法只有8个(4组)。

  • 1、encode, decode一组, 专门用来编码和解码文件的, 也可以对StringIO里的数据做编解码;

  • 2、encodestring, decodestring一组, 专门用来编码和解码字符串;

  • 3、b64encode和b64decode一组,用来编码和解码字符串,并且有一个替换符号字符的功能

  • 这个功能是这样的: 因为base64编码后的字符除 了英文字母和数字外还有三个字符 + / =

  • 其中=只是为了补全编码后的字符数为4的整数; 而+和/在一些情况下需要被替换的; b64encode和b64decode正是提供了这样的功能。

    至于什么情况下+和/需要被替换,最常见的就是对url进行base64编码的时候。

  • 4、urlsafe_b64encode和urlsafe_b64decode 一组, 这个就是用来专门对url进行base64编解码的,

    实际上也是调用的前一组函数(b64encode和b64decode)

  • 注意在python2之前base64模块函数的参数可以直接使用字符串,python3以后只能适用二进制字符串

    import base64
    # from io import StringIO
    from io import BytesIO
    

python2版本

str1 = “this is a test”

对字符串编码

encodeStrTest = base64.encodestring(str1)

print(encodeStrTest)

对字符串解码

print(base64.decodestring(encodeStrTest))

# python3版本
# 对字符串编码
print(10000000)
encodeStrTest = base64.encodestring(b"this is a test")
print(encodeStrTest)
# 对字符串解码
print(base64.decodestring(encodeStrTest))

# python2版本
# str2 = "Hello, World!"
# strIO = StringIO()
# strIO.write(str2)
# encodeTest = StringIO()
# decodeTest = StringIO()
# # 对StringIO内的数据进行编码
# strIO.seek(0)
# base64.encode(strIO, encodeTest)
# print(encodeTest.getvalue())
# 对StringIO内的数据进行解码
# encodeTest.seek(0)
# base64.decode(encodeTest, decodeTest)
# print(decodeTest.getvalue())


# python3版本
str2 = "Hello, World!"
binIO = BytesIO()
binIO.write(str2.encode("utf-8"))
encodeTest = BytesIO()
decodeTest = BytesIO()
# 对BytesIO内的数据进行编码
binIO.seek(0)
base64.encode(binIO, encodeTest)
print(encodeTest.getvalue())
# 对BytesIO内的数据进行解码
encodeTest.seek(0)
base64.decode(encodeTest, decodeTest)
print(decodeTest.getvalue())

url = "http://www.cnblogs.com/sislcb/archive/2008/11/28/1342824.html"
# 对url的字符串进行编码
urlEncodeTest = base64.urlsafe_b64encode(url.encode("utf-8"))
print(urlEncodeTest)                             # b'aHR0cDovL3d3dy5jbmJsb2dzLmNvbS9zaXNsY2IvYXJjaGl2ZS8yMDA4LzExLzI4LzEzNDI4MjQuaHRtbA=='
# 对url进行解码

print(base64.urlsafe_b64decode(urlEncodeTest)) # b’http://www.cnblogs.com/sislcb/archive/2008/11/28/1342824.html

上面的encode函数和decode函数的参数其实还可以是文件对象的,那的象这样:

f1 = open(‘aaa.txt’, ‘r’)

f2 = open(‘bbb.txt’, ‘w’)

base64.encode(f1, f2)

f1.close()

f2.close()

参考链接地址:

https://www.cnblogs.com/zanjiahaoge666/p/7242642.html

https://blog.csdn.net/zengxiantao1994/article/details/60465165

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值