base64编码方式

一、编码的两大方式:

在python3.x中,字符串编码分为unicode和bytes两大类编码方式。

直接书写s='中国人',这种方式定义的编码方式为unicode,是通用的方式。

另一种是bytes编码方式,也就是所谓的二进制编码,可以分为utf-8,gbk,latin1等方式,但它们都是二进制编码方式。

unicode编码与二进制编码相互之间可以转化:

unicode.encode('utf-8')  unicode转utf-8编码

utf-8.decode('utf-8')  utf-8编码转unicode编码

二进制编码的表现形式为添加一个前缀b字符,如b'xe4xb8xad',表示‘中’字。

注意:自己写二进制文件时,不能包含非ASCII编码字符,如b=b'中国'是非法编码,诸如b=b'chinese'是合法编码。

二、base64编码:

base64编码不是加密方式,而是一种编码方式。是由0-9a-zA-Z及+和/共64个字符(外加一个=号,是填充符,可以说是65个字符)作为基本字符进行编码。

具体编码原理见链接:base64编码方式

编码原理:每一种编码方式,都最终是用0、1两个值来组合代表某个字符。由于base64是由64个字符组成的,64可由6个bit值表示。因此,每个字符都是由6个bit表示。通常的英文字符是由8bit表示,中文由16bit表示。因此要将中英文转化成base64编码,中英文的总bit值必须要是6的倍数,否则在最后添加0组成6的倍数。最后组成的0会以=号的形式显示,也就是所谓的填充符号。

三、文本的读写:

open('xxx.txt',endcoding='xxx',‘wb')

open函数用来从磁盘中读取或写入文本或者二进制数据(图片,视频等)。因此分为两种情况:

1.写文本:

写文本时,写入的内容必须是unicode格式,不能是二进制编码(如‘中国’.encode('utf-8')这样的二进制也不行)。但是编码方式呢,可以通过encoding这个参数来控制。无论是按照哪种方式编码,写入txt文件后都是以可读的方式显示。

这是因为记事本本身就能够将不同的编码格式翻译成人类可读的方式。

2.写二进制文件:

写二进制文件时,写入模式必须加上’wb',且不能有encoding参数。由于二进制文件能够被记事本解读,因此通过encode()生成的二进制在记事本中也以人类可读方式显示。

三、base64加解密:

import base64

text='base64加密参数为二进制格式,返回加密文件也是二进制,解密后的文件也是二进制,必须通过decode()转化后才可读'
text=text.encode('utf-8')
text=base64.b64encode(text)#参数值text必须是二进制
print('这是加密后的文本: ',text)

with open('encode.txt','wb') as fp:
fp.write(text)

with open('encode.txt','rb') as fp:
text=fp.read()
text=base64.b64decode(text)#解密后也是二进制
print('这是解密后的文本: ',text)
print('这是转化成unicode后的原始文本: ',text.decode())#必须转化后才可读

执行结果:

这是加密后的文本:   b'YmFzZTY05Yqg5a+G5Y+C5pWw5Li65LqM6L+b5Yi277yM6L+U5Zue5Yqg5a+G5paH5Lu25Lmf5piv5LqM6L+b5Yi277yM6Kej5a+G5ZCO55qE5paH5Lu25Lmf5piv5LqM6L+b5Yi277yM5b+F6aG76YCa6L+HZGVjb2RlKCnovazljJblkI7miY3lj6/or7s='
这是解密后的文本:   b'base64xe5x8axa0xe5xafx86xe5x8fx82xe6x95xb0xe4xb8xbaxe4xbax8cxe8xbfx9bxe5x88xb6xefxbcx8cxe8xbfx94xe5x9bx9exe5x8axa0xe5xafx86xe6x96x87xe4xbbxb6xe4xb9x9fxe6x98xafxe4xbax8cxe8xbfx9bxe5x88xb6xefxbcx8cxe8xa7xa3xe5xafx86xe5x90x8exe7x9ax84xe6x96x87xe4xbbxb6xe4xb9x9fxe6x98xafxe4xbax8cxe8xbfx9bxe5x88xb6xefxbcx8cxe5xbfx85xe9xa1xbbxe9x80x9axe8xbfx87decode()xe8xbdxacxe5x8cx96xe5x90x8exe6x89x8dxe5x8fxafxe8xafxbb'
这是转化成unicode后的原始文本:   base64加密参数为二进制,返回加密文件也是二进制,解密后的文件也是二进制,必须通过decode()转化后才可读

原文地址:https://www.cnblogs.com/zhuluqing/p/8480607.html