【Python】base64模块

骑猪看日落 2023-10-15 14:59 118阅读 0赞

base64模块是用来作base64编码解码,常用于小型数据的传输。编码后的数据是一个字符串,其包括a-z、A-Z、0-9、/、+共64个字符,即可用6个字节表示,写出数值就是0-63.故三个字节编码的话就变成了4个字节,如果数据字节数不是3的倍数,就不能精确地划分6位的块,此时需要在原数据后添加1个或2个零值字节,使其字节数为3的倍数,然后在编码后的字符串后添加1个或2个‘=’,表示零值字节,故事实上总共由65个字符组成。

在Python种,base64是内置的常用的标准模块,我们可以直接通过import导入base64模块直接使用。

  1. import json,base64
  2. if __name__ == '__main__':
  3. # 要编码的数据
  4. data = {
  5. "uname":"Tanch","uid":3}
  6. # 先转化为bytes类型数据
  7. data_bytes = json.dumps(data).encode()
  8. print(type(data_bytes))
  9. # 编码
  10. base_data = base64.b64encode(data_bytes)
  11. print(base_data)
  12. # 解码
  13. string_bytes = b"eyJ1bmFtZSI6ICJUYW5jaCIsICJ1aWQiOiAzfQ=="
  14. ori_data = base64.b64decode(string_bytes).decode()
  15. # 字符串
  16. print(ori_data)
  17. # 变回原来的字典
  18. data = json.loads(ori_data)
  19. print(type(data))

打印结果如下:

  1. <class 'bytes'>
  2. b'eyJ1bmFtZSI6ICJUYW5jaCIsICJ1aWQiOiAzfQ=='
  3. {
  4. "uname": "Tanch", "uid": 3}
  5. <class 'dict'>

base64模块真正用的上的方法只有8个,分别是encode, decode, encodestring, decodestring, b64encode,b64decode, urlsafe_b64decode,urlsafe_b64encode。

他们8个可以两两分为4组,encode,decode一组,专门用来编码和解码文件的,也可以StringIO里的数据做编解码;encodestring,decodestring一组,专门用来编码和解码字符串; b64encode和b64decode一组,用来编码和解码字符串,并且有一个替换符号字符的功能;urlsafe_b64encode和urlsafe_b64decode一组,这个就是用来专门对url进行base64编解码的。

代码实例如下所示:

b64encode和b64decode:对字符串操作

  1. import base64
  2. st = 'hello world!'.encode()#默认以utf8编码
  3. res = base64.b64encode(st)
  4. print(res.decode())#默认以utf8解码
  5. res = base64.b64decode(res)
  6. print(res.decode())#默认以utf8解码

输出结果为:

  1. aGVsbG8gd29ybGQh
  2. hello world!

编码与解码的处理对象是byte,故对原数据要先编码,使原本的str类型变成byte,解码后直接输出来的是byte对象,故要解码成str对象。

发表评论

表情:
评论列表 (有 0 条评论,118人围观)

还没有评论,来说两句吧...

相关阅读

    相关 【Python】base64模块

    base64模块是用来作base64编码解码,常用于小型数据的传输。编码后的数据是一个字符串,其包括a-z、A-Z、0-9、/、+共64个字符,即可用6个字节表示,写出数值就是

    相关 base64模块

    概念 Base64是一种基于64个可打印字符来表示二进制数据的表示方法。由于2^6=64,所以每6个比特为一个单元,对应某个可打印字符。3个字节有24个比特,对应于4个B

    相关 base64 模块

    Base64简介 Base64是一种用64个字符来表示任意二进制数据的方法。 Base64是一种通过查表的编码方法,不能用于加密,即使使用自定义的编码表也不行。 Ba