python基础-base64编码理解

目录

1、base64是什么

2、base64有什么用

3、base64如何用

4、理解base64

5、扩展

1、base64是什么

  • base64 就是包括字母a-z,A-Z,数字0-9,符号"+","/"一共64个字符的字符集;
  • 还有一个'=' 字符,占位补充; -- 这样看实际是65个字符了,'='只是占位
  • 任何数据都可以转为字符集的字符,这个转换过程就是base64编码;
  • base64不能算是一种加密,只能说是编码转换!

扩展点: 编码给计算机看,解码给人看。

简单记:

base64编码操作字节,核心是3转4字节; ---base64是二次编码的操作!

2、base64有什么用

  • base64没有特殊字符,可以防止传输中因为协议的识别导致理解为控制字符而出错;
  • 确保编码的结果可打印且无歧义,不收到特殊字符的影响,例如'\n'... ;

3、base64如何用

导入模块:

python 复制代码
 import base64 
方法 作用
base64.b64encode( 字串 ) 编码; 返回 : byte类型的字节串
base64.b64decode(字串 / 字符串) 解码; 返回 : byte类型的字节串

示例:编码和解码

python 复制代码
import base64
# 编码过程 两次:base64编码 --->字节串 ----> utf-8解码显示为字符串
s = "我是一个字符串"
encoder = base64.b64encode(s.encode("utf-8"))
print(type(encoder))              # <class 'bytes'>
# 编码后转为字符串显示
print( encoder.decode('utf-8'))   # str类型 5oiR5piv5LiA5Liq5a2X56ym5Liy
# 解码过程 两次:base64解码 --->字节串 --->utf-8解码显示为字符串
decoder = base64.b64decode(encoder)
print(type(decoder))              # <class 'bytes'>
#解码后转为字符串显示
print('解码后:',decoder.decode()) # 我是一个字符串

示例二:简化书写:

python 复制代码
import base64

# 默认编码utf-8
s = '山高路远,道阻且长。心向往之,行必能至。'
sEncode = base64.b64encode(s.encode()).decode()
print('编码后的字符串:',sEncode)
# 5bGx6auY6Lev6L+c77yM6YGT6Zi75LiU6ZW/44CC5b+D5ZCR5b6A5LmL77yM6KGM5b+F6IO96Iez44CC
# 解码:
sDecode = base64.b64decode(sEncode).decode()
print('解码后的字符串',sDecode)
# 山高路远,道阻且长。心向往之,行必能至。

4、理解base64

**核心点 :3个字节转为4个字节;**2的6次方 = 64

  • 计算机默认一个字节是8位,base64编码是6位编码,这样最小公倍数是24;
  • 编码过程是:取三个字节分为四组,每组前面补0,凑够8位; ---所以串长度增加1/3;
  • 高位统一补00,低位不足6位,后面低位也补0;

注意点:

Base64是把3个字节变为4个字节,所以,Base64编码的长度永远是4的倍数,因此,需要加上=把Base64字符串的长度变为4的倍数,就可以正常解码了。

理解下图 :

5、扩展

  • base64编码串一定是4的倍数,如果不足4的倍数,需要添加'='补充;
  • 补充 = 的一个方式: s64 += ("=" * (4 - len(s64) % 4))
python 复制代码
s64 = "eW91eQ" #base64的字符串
# ret = base64.b64decode(s64)
# print(ret)
s64 += ("=" * (4 - len(s64) % 4))
print("填充后", s)
ret = base64.b64decode(s64).decode()
print(ret)
相关推荐
Elias不吃糖3 分钟前
java开发的三层架构
java·开发语言·架构
lixin5565569 分钟前
基于神经网络的音乐生成增强器
java·人工智能·pytorch·python·深度学习·语言模型
养海绵宝宝的小蜗9 分钟前
Python第二次作业
开发语言·python
我的xiaodoujiao11 分钟前
使用 Python 语言 从 0 到 1 搭建完整 Web UI自动化测试学习系列 43--添加allure测试报告显示信息和其他封装方法
python·学习·测试工具·allure
无垠的广袤13 分钟前
【CPKCOR-RA8D1】RUHMI 转换 AI 模型
人工智能·python·嵌入式硬件·开发板
aiguangyuan17 分钟前
从词袋到TF-IDF:sklearn文本特征工程实战指南
人工智能·python·nlp
数据知道25 分钟前
PostgreSQL 实战:详解 UPSERT(INSERT ON CONFLICT)
数据库·python·postgresql
June bug25 分钟前
(#数组/链表操作)寻找两个正序数组的中位数
数据结构·python·算法·leetcode·面试·职场和发展·跳槽
李昊哲小课1 小时前
奶茶店销售额预测模型
python·机器学习·线性回归·scikit-learn
电商API&Tina1 小时前
电商API接口的应用与简要分析||taobao|jd|微店
大数据·python·数据分析·json