前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python学习笔记7.4-内建模块base64

python学习笔记7.4-内建模块base64

作者头像
锦小年
发布2018-01-02 14:33:07
6760
发布2018-01-02 14:33:07
举报
文章被收录于专栏:锦小年的博客

有时候,我们用noepad++或者记事本打开图片或者程序等文件的时候会显示大量的乱码,主要原因是这些文件编码的时候并不是字符串编码的。如果我们想把这些文件正常显示为字符,这个时候就可以用到base64,它就是一种编码、解码的规则。 正式介绍一下base64的原理: (1)准备一个包含64个字符的数组:

代码语言:javascript
复制
['A', 'B', 'C', ... 'a', 'b', 'c', ... '0', '1', ... '+', '/']

(2)对二进制数据进行处理,每3个字节一组,一共是3x8=24bit,划为4组,每组正好6个bit:2^6 = 64,刚好可以用来索引(创造这个规则的人真是聪明)。如果字符数量不是3的整数倍,在最后补上0x/00,并用=或者==来表示。

所以,Base64编码会把3字节的二进制数据编码为4字节的文本数据,长度增加33%,好处是编码后的文本数据可以在邮件正文、网页等直接显示。 还是实例具有说服力:

代码语言:javascript
复制
In [1]: import base64

In [2]: string1 = base64.b64encode(b'nihaoa')

In [3]: string1
Out[3]: b'bmloYW9h'

In [4]: string2 = base64.b64encode(b'nihao')

In [5]: string2
Out[5]: b'bmloYW8='

In [6]: string3 = base64.b64encode(b'niha')

In [7]: string3
Out[7]: b'bmloYQ=='

第一个刚好是3的整数倍,第二个差一个,所以补了=,第三个差2个所以补了2个==

由于标准的Base64编码后可能出现字符+和/,在URL中就不能直接作为参数,所以又有一种”url safe”的base64编码,其实就是把字符+和/分别变成-和_:

代码语言:javascript
复制
>>> base64.b64encode(b'i\xb7\x1d\xfb\xef\xff')
b'abcd++//'
>>> base64.urlsafe_b64encode(b'i\xb7\x1d\xfb\xef\xff')
b'abcd--__'
>>> base64.urlsafe_b64decode('abcd--__')
b'i\xb7\x1d\xfb\xef\xff'

base64还可以自己定义字符顺序,这样就可以用来加密了,有兴趣可以自己玩一把。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档