python基础-base64编码理解

目录

1、base64是什么

2、base64有什么用

3、base64如何用

4、理解base64

5、扩展

1、base64是什么

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

2、base64有什么用

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

3、base64如何用

导入模块:

 import base64 
方法作用
base64.b64encode( 字节串 )

编码;

返回 : byte类型的字节串

base64.b64decode(字节串 / 字符串)

解码;

返回 : byte类型的字节串

示例:编码和解码

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()) # 我是一个字符串

示例二:简化书写:

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))
s64 = "eW91eQ" #base64的字符串
# ret = base64.b64decode(s64)
# print(ret)
s64 += ("=" * (4 - len(s64) % 4))
print("填充后", s)
ret = base64.b64decode(s64).decode()
print(ret)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/320441.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【已解决】C语言进行多线程数据切割查找数据

第一次听到多线程切割&#xff0c;笔者也没听的太懂&#xff0c;但发现多线程数据切割其实就是分出多个线程&#xff0c;进行处理查找数据的事情。而为什么切割呢&#xff0c;就是因为数据不够线程数分的&#xff0c;假如1k个数据&#xff0c;7个线程&#xff0c;这里不能够整除…

吐血整理,性能测试重要指标+设计真实负载(详细总结)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、性能测试之重要…

初识C语言·数据存储

1 整数在内存中的存储 前面讲到&#xff0c;整数在计算机中的存储是以补码形式存储的&#xff0c;其中正数和负数也有些许差别&#xff0c;正数的三码相同&#xff0c;负数的就不相同了&#xff0c;那么这里就涉及原码反码补码。 原码&#xff1a;直接把整数用二进制的方式表…

Pandas:Python可视化神器

大家好&#xff0c;数据可视化可以让我们很直观的发现数据中隐藏的规律&#xff0c;察觉到变量之间的互动关系&#xff0c;可以帮助我们更好的给他人解释现象&#xff0c;做到一图胜千文的说明效果。 常见的数据可视化库有: matplotlib 是最常见的2维库&#xff0c;可以算作可…

Codeforces Round 913 (Div. 3)E 不进位各数位和与打表

Problem - E - Codeforces digsum(a)digsum(b)digsum(c)digsum(n) 要点一&#xff1a; 当左边和发生进位&#xff0c;比如56 11&#xff0c;那么数位和会变小。其实下一位就是相加后对9取余&#xff0c;各数位和必定变小的。 要点二&#xff1a; 然后就是组合情况了&#x…

[NAND Flash 5.5] PLC NAND 虽来但远

依公知及经验整理,原创保护,禁止转载。 专栏 《深入理解NAND Flash》 <<<< 返回总目录 <<<< 前言 图片来源: 存储随笔 2022年8月份在美国FMS峰会上,Solidigm公司(前身为Intel NAND部门)展示了全球第一款基于PLC NAND研发的SSD。这也标志着,PLC…

大模型推理优化实践:KV cache 复用与投机采样

作者&#xff1a;米基 一、背景 RTP-LLM 是阿里巴巴大模型预测团队开发的大模型推理加速引擎&#xff0c;作为一个高性能的大模型推理解决方案&#xff0c;它已被广泛应用于阿里内部。该引擎与当前广泛使用的多种主流模型兼容&#xff0c;并通过采用高性能的 CUDA 算子来实现了…

polar CTF 写shell

一、题目 <?php /*PolarD&N CTF*/highlight_file(__FILE__);file_put_contents($_GET[filename],"<?php exit();".$_POST[content]);?>二、解题 payload ?filenamephp://filter/convert.base64-decode/resourceshell.php #<?eval($_POST[1]);…

maven镜像源设置aliyun提升下载速度

一、打开pom.xml project下在添加 <repositories><repository><id>aliyunmaven</id><name>aliyun</name><url>https://maven.aliyun.com/repository/public</url></repository><repository><id>central2&l…

PriorityQueue优先队列使用的注意事项

PriorityQueue只保证队列的头和尾是指定序列的两个端点值&#xff0c;不是给它的元素排序了。 所以在使用的时候直接打印 PriorityQueue &#xff0c;或者用 增强for 遍历出来的数据都不是有序的。正确的遍历方式如下&#xff1a; // 按照排序顺序输出 PriorityQueue 中的元素…

贪心算法(思路)

最近在cf上做了很多贪心的题&#xff0c;写篇博客来总结一下 Problem - C - Codeforces 看第一道题 不难看出&#xff0c;我们需要在数组中找到一段奇偶相间的序列&#xff0c;要使他们的和最大&#xff0c; 在图中我们假设[1,2]和[3,4]是奇偶相间的序列&#xff0c;我们在在…

Asp .Net Core 系列:基于 Swashbuckle.AspNetCore 包 集成 Swagger

什么是 Swagger? Swagger 是一个规范和完整的框架&#xff0c;用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。它提供了一种规范的方式来定义、构建和文档化 RESTful Web 服务&#xff0c;使客户端能够发现和理解各种服务的功能。Swagger 的目标是使部署管理和使用功…

py爬虫入门笔记(request.get的使用)

文章目录 Day11. 了解浏览器开发者工具2. Get请求http://baidu.com3. Post请求https://fanyi.baidu.com/sug4. 肯德基小作业 Day21. 正则表达式2. 使用re模块3. 爬取豆瓣电影Top250的第一页4. 爬取豆瓣电影Top250所有的250部电影信息 Day31. xpath的使用2. 认识下载照片线程池的…

算法通关村第十六关—滑动窗口与堆结合(黄金)

滑动窗口与堆结合 堆与滑动窗口问题的结合 LeetCode239给你一个整数数组nums,有一个大小为k的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的k个数字。滑动窗口每次只向右移动一位&#xff0c;返回滑动窗口中的最大值。  对于最大值、K个最大这种场…

k8s的存储卷(数据卷)

1、存储卷&#xff1a;容器内的目录和宿主机的目录进行挂载 2、容器在系统上的生命周期是短暂的&#xff0c;delete&#xff0c;k8s用控制器创建的pod&#xff0c;delete相当于重启&#xff0c;容器的状态也会恢复到初始状态&#xff0c;一旦回到初始状态&#xff0c;所有的后…

Java环境变量——Windows和Linux配置jdk

本文我主要是介绍jdk的下载方式和在Windows系统下安装配置jdk11&#xff08;压缩包格式&#xff09;&#xff0c;其他格式的jdk以及Linux操作系统上的jdk安装我后续视情况进行更新… JDK的下载 大家可以去官网Java|Oracle下载对应的资源 继续往下翻&#xff0c;就可以看到Jav…

WorkPlus助力企业高效协作的企业级内网即时通讯解决方案

在企业内部&#xff0c;高效沟通和协作是推动工作顺利进行的关键。而企业级内网即时通讯成为了提升内部沟通效率的重要工具。作为一家领先的企业级内网即时通讯解决方案&#xff0c;WorkPlus以其卓越的性能和高安全性&#xff0c;打造了高效沟通协作的新标杆。 为什么选择WorkP…

【web服务搭建实验】之nginx基础学习

目录 一、nginx的简介二、nginx安装实验虚拟主机的配置web服务器的主流实现方式-LAMP和LNMP 一、nginx的简介 Nginx是一款轻量级HTTP服务器&#xff0c;同时也是代理邮箱服务器&#xff0c;具备反向代理&#xff0c;通用代理的功能。支持多个系统&#xff0c;和不同操作系统。…

Java内容

目录 1.命名规范 1.命名规范 2.变量

蓝桥杯省赛无忧 STL 课件18 总结

3226 宝藏排序 II 1624 小蓝吃糖果 2490 小蓝的括号串1 1531快递分拣