base64只是用来编码,不是加密,是用64个字符来表示任意二进制数据的方法
历史原因,有些邮件系统只支持7Bit字节传输,而汉字是8Bit.当传输汉字时,第8位的1全部换成0.
例如"中文",HEX为A4A4A4E5,高位清掉变成24242465,也就成了$$$e
除了文字外,图片,压缩文件等也会出现这种问题,所以在电子邮件中,使用base64将8Bit按照一定规则进行编码,适应7Bit的邮件系统.
MIME(Multipurpose Internet Mail Extentions)就是常用的编码模式,他定义了Base64的编码方法.

import base64
encodestr = base64.b64encode('abc'.encode('utf-8'))

等号

base64对二进制数据进行处理,3个字节1组,一共是3*8=24bit.然后将24bit划分为4组,每组6bit.既把3字节的二进制数据,编码为4字节的二进制数据,长度增加33%.
如果二进制数据,字节不是3的倍数,base64用\x00字节在末尾补足,再在末尾添加1个或2个=号,表示补了多少个字节.解码的时候会自动去掉.

import base64
base64.b64encode(b'wang') # b'd2FuZw=='  # 四个字节,后面补两个=号
base64.b64decode(b'd2FuZw==') # b'wang'
b'd2FuZw=='.decode()  # 'd2FuZw==' # 将base64编码后的二进制,转换为字符串,这样就可以给前端使用

注意base64的输入和输出都是二进制,也即是说base64是对二进制的编码,而python的encodedecode是对二进制和字符的换换

=可能在url和cookie中引起歧义,所以有些base64会把最后的=号去掉,需要手动补充,补充的原则是字节码是4的倍数

url

base64编码后可能出现+或者/,在url里不能直接作为参数,所以可以使用针对url的base64编码,就是把+/分别变成-_:

import base64
base64.b64encode(b'\xb7\x1d\xfb\xef\xff')  # b'tx377/8='
base64.urlsafe_b64encode(b'\xb7\x1d\xfb\xef\xff')  # b'tx377_8='
base64.urlsafe_b64decode(b'tx377_8=')
from jinja2 import Template,FileSystemLoader,Environment
env = Environment(loader=FileSystemLoader("./"))
template = env.get_template("./test.html")import matplotlib.pyplot as plt
x = [1,2,3]
y = [1,2,3]
plt.plot(x,y)
from io import BytesIO
buf = BytesIO()
plt.savefig(buf,format='png')
import base64
data = base64.b64encode(buf.getvalue()).decode() # base64 encode之后仍是字节的形式`b""`,多以要用decode转换成字符串给前端,这里因为是ascii码,所以decode之后引号之内的内容是一样的
data = "data:image/png;base64," + data
temp_render = template.render(name=data)
print(temp_render)
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><img src="{{ name }}"></body>
</html>

参考:
http://bbs.chinaunix.net/thread-1150250-1-1.html
https://www.jb51.net/article/132662.htm
https://blog.csdn.net/ruanxingzi123/article/details/83017575
https://blog.csdn.net/weixin_42506905/article/details/82053888

Python Base64相关推荐

  1. Python Base64模块的使用

    Python Base64模块的使用 一.base64原理简介 base64可以理解为一种加密算法,用64个常见字符来表示8字节的二进制数字. 64个字符:'ABCDEFGHIJKLMNOPQRSTU ...

  2. Python base64库 解码本地txt文本字符串

    Python base64库 解码本地txt文本字符串 使用base64还原由图片加密而成的字符串. Raw字符串: iVBORw0KGgoAAAANSUhEUgAAAtoAAALaCAYAAAAP7 ...

  3. python base64和png或jpg图片转换

    python base64和png或jpg图片转换 如何将获取到的base64数据转为png/jpg格式的图片: decoded = base64.decodebytes(string.encode( ...

  4. Python base64编码

    Python base64编码 1.bytes.decode() decode()方法语法: bytes.decode(encoding="utf-8", errors=" ...

  5. Python Base64转码解码

    Python Base64 提供了好几种方法例如: encode, decode, encodestring, decodestring, b64encode, b64decode, standard ...

  6. python base64编码_JS和Python实现AES算法

    1. AES原理 AES算法是典型的对称加密算法,AES原理可以学习这两篇文档: 漫画:什么是AES算法:https://www.toutiao.com/i6783550080784794124/ A ...

  7. python base64 实现_用Python开发GUI实战教程:图片转换素描画工具

    python作为胶水语言,它几乎是无所不能的,但个人一直觉得在GUI开发方面,python可以算作是短板了,为什么?因为性能-python的性能问题,往往出现在其他编程语言对其的鄙夷中.但不管如何py ...

  8. python base64解码转图片问题

    最近在学自动化,网页登录验证码图片是base64格式,用python解码要不就是是黑底图片,要不就是报错,提示:Incorrect padding. 从网上也找了许多解决方法,如末尾增添删除" ...

  9. python base64库介绍

    实例代码, import base64str1='you_know_how_to_remove_junk_code'flag=''for i in str1:flag += chr(ord(i)^0x ...

最新文章

  1. 炸了!一口气问了我18个JVM问题!
  2. IOS开发 使用CGContextRef绘制文字时的设置
  3. NoBrokersAvailableError
  4. python是一门什么课程-从无到有用Python创造一门属于自己的编程语言1
  5. 合成存储方法,局部/全局变量
  6. arraylist 后往前遍历_面试官:请说出线程安全的 ArrayList 有哪些,除了Vector
  7. python ssl_Python3 ssl模块不可用的问题
  8. 汽车电子专业知识篇(二十)-深度解析CAN FD与传统CAN的差异
  9. ueditor如何设置上传图片的高度宽度_上百张图片上传并对齐,你加班2小时没搞定,同事简单三步就完成...
  10. 机器学习经典算法笔记——KNN
  11. c语言去掉数组中重复的,C语言删除无序整型数组中的重复元素及时间复杂度
  12. 一位Oracle顶流铁粉的“躬身入局”
  13. I wish one day, I can be that large tree, giving shadow to you!
  14. STM32单片机开发之让蜂鸣器发声
  15. attention机制_Seq2seq模型中的 Attention机制
  16. 反射:集合泛型的本质
  17. 企业微信付款到零钱,全代码讲解,包含怎么加入商户证书
  18. iPhone 无法更新软件
  19. linux控制NVme硬盘点灯,硬盘点灯模式的设置方法及装置与流程
  20. 《坂上之云》电影手记

热门文章

  1. 从C语言到C++的进阶之一些C基础上的增强用法(篇五)
  2. 打开浏览器不是主页_浏览器首页被篡改!教你几个快速解决的方法
  3. stm32 python界面开发_【STM32开发】使用Qt Creator 开发STM32
  4. Python为视频设置遮罩实现异形窗口播放
  5. Python暴力破解凯撒加密的文本
  6. Python使用pandas对数据进行差分运算
  7. Python使用递归法对整数进行因数分解
  8. 三同轴连接器_电子元器件 连接器相关知识
  9. C++---------之--------【虚析构函数】
  10. 手机号星号_word把个人信息中的手机号其中四位设成星号的操作步骤图解