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

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

['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%,好处是编码后的文本数据可以在邮件正文、网页等直接显示。
还是实例具有说服力:

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编码,其实就是把字符+和/分别变成-和_:

>>> 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还可以自己定义字符顺序,这样就可以用来加密了,有兴趣可以自己玩一把。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值