Python中Base64编码与解码

  参考:https://blog.csdn.net/pengjunlee/article/details/91127222

  Base64简介

  Base64是网络上最常见的用于传输8bit字节码的编码方式之一,Base64就是一种基于64个可打印字符(包括a-z,A-Z,0-9,/,+)来表示二进制数据的方法。Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息。

  按照RFC2045的定义,Base64被定义为:Base64内容传送编码被设计用来把任意序列的8位字节描述为一种不易被人直接识别的形式。(The Base64 Content-Transfer-Encoding is designed to represent arbitrary sequences of octets in a form that need not be humanly readable.)

  Base64编码原理

  Base64要求把没三个8Bit的字节转换为四个6Bit的字节(3*8 = 4*6 =24),然后把6Bit在添加高位0,组成四个8Bit的字节,也就是说,转换后的字符串理论上将比原来的长1/3.

  Base64编码遵循以下规则

  ①把3个字符变成4个字符。

  ②没76个字符加一个换行符。

  ③最后的结束符也要处理。

  转码过程示例

 

   注意:使用ord函数查看字符串对应的ascii码,例如要查看字符s的assic码,

ord('s')

  对照转换表:结果 c z E z  

 

   从严格意义上来说,BASE64编码算法并不算是真正的加密算法,它只是将源数据转码成为了一种不易阅读的形式,而转码的规则是公开的(解码很容易)。转码之后的数据具有不可读性,需要解码后才能阅读。 

  注:BASE64加密后产生的字节位数是8的倍数,如果不够位数以=符号填充。

  演示一个编码过程,首先演示一个二进制直接刚好为3位的例如 b'liu'

  转换前 l i u

  先转成ascii码 108 105 117

  在转成二进制 01101100 01101001 01110101

  分成6位一组 011011 000110 100101 110101

  高位补00组成 00011011 00000110 00100101 00110101

  转换成10进制得到4个整数 27 6 37 53

  查表得到 bGl1

  小写b 大写G 小写l 数字1

  最后转码得到 b'bGl1'

import base64
print(base64.b64encode(b'liu'))
# b'bGl1'

  在演示假如二进制不是3的整数倍的情况 b'liuy' 

  转换前 l i u y

  先转成ascii码 108 105 117 121

  在转成二进制因为不满足3的整数倍所以在尾部补齐两个八位0  01101100 01101001 01110101 01111001 00000000 00000000

  分成6位一组 011011 000110 100101 110101 011110 010000 000000 000000

  高位补00组成 00011011 00000110 00100101 00110101 00011110 00010000 00000000 00000000

  转换成10进制 27 6 37 53 30 16 

  查表得到 bGl1eQ 

  不足位数使用==代替 最后结果为

  b'bGl1eQ=='

  即补了几位则使用几个=在尾部补充

 

  

  

 

  

 
posted @ 2021-08-13 17:21  minseo  阅读(3812)  评论(0编辑  收藏  举报