深入浅出理解base编码

简介: 深入浅出理解base编码

base64 是什么?

Base64,顾名思义,就是包括小写字母a-z、大写字母A-Z、数字0-9、符号"+"、"/"一共64个字符的字符集,(另加一个“=”,实际是65个字符,至于为什么还会有一个“=",这个后面再说)。任何符号都可以转换成这个字符集中的字符,这个转换过程就叫做base64编码。

base64怎么转换

首先将字符串(图片等)转换成二进制序列,然后按每6个二进制位为一组,分成若干组,如果不足6位,则低位补0。每6位组成一个新的字节,高位补00,构成一个新的二进制序列,最后根据base64索引表中的值找到对应的字符。

我们举个例子, 假设有字符串“abc", 我们要对其进行base64编码,最后结果会是什么呢?

1682346323997.png

字符串abc对应3个字节,一共24位,按6位为一组可分为4组,在每组的高位补上00,经过转换,abc 的 base64 编码是 YWJj, 由原来的3个字母变成了4个,所以base64会比原字符串更长。

那问题来了,假设原始字符串不够3个字节,只有一个字节或者两个字节怎么办?

以两个字节为例, 按照上面的转换逻辑,经过编码转换,第三个字节只有4位,需要在第三组前后都要加两个0,转换后的字符串是 YWI。 为了凑齐4个字节,还要在末尾补上一个"="号,最后得到的base64编码就是: "YWI="

1682346340372.png

如果原始字符只有一个字节,原理是类似的,第二个字节除了前面补两个0,还要在后面补4个0,得到的字符串是YQ,剩下两个字节也用等号“=”来凑。所以a的base64编码就是 YQ==

1682346355440.png

总结一点就是只要原始字符串的长度不能被3整除,后面的位都会用0来补充。

base64用在哪些场景

1、html中的图片用base64表示

打开google的首页,就能看到某些样式中的图片不是一个资源地址,而是base64编码的字符串,这么做有什么好处呢? 当然是减少了一次http的请求,但也并不是什么图片都适合用base64来处理,因为图片越大,转换的base64的字符串就越长,对带宽的要求更高了。

2、邮件传输

早期电子邮件的收发只允许使用ascii字符,这就导致无法发送非ascii字符,图片等二进制文件。所以在MIME对电子邮件进行了扩展,该扩展协议就指定了内容的传输的编码格式,可以是base64,base64编码使得在电子邮件中传输图片成为可能。

当然也可以将base64的内容放在url中传输。

在主流编程语言中,都内置的base64模块,可以直接调用,无需自己重复造轮子

python 示例

# 编码
>>> base64.b64encode(b'abc')
b'YWJj'
# 解码
>>> base64.b64decode(b'YWJj')
b'abc'

除了基本的base64,还有一种url safe 形式的编码方式,目的是将“+/” 替换成 “-_”, 因为标准的Base64并不适合直接放在URL里传输,URL编码器会把标准Base64中的“/”和“+”字符变为形如“%XX”的形式,而这些“%”号在存入数据库时还需要再进行转换。

>>> base64.b64encode(b'i\xcf\xbf')
b'ac+/'
# 使用"url safe"的base64编码会把+/ 替换成 -_
>>> base64.urlsafe_b64encode(b'i\xcf\xbf')
b'ac-_'

base64 是加密算法吗?

base64不是加密算法,他只是一种编码方式,数据从一种形式转换为另一种形式进行传输/存储。


目录
相关文章
|
7月前
|
人工智能 API 网络安全
2026年阿里云部署OpenClaw(原Clawdbot)完整操作指南
在AI办公自动化与智能代理工具普及的当下,OpenClaw(前身为Clawdbot、Moltbot)凭借自然语言理解、多任务自动化及多工具集成的核心能力,成为个人处理办公事务与小型团队优化协作流程的实用工具。该工具可适配文档处理、日程管理、代码生成、任务分配等多种场景,而阿里云提供的专属部署方案,通过预配置环境与简化流程设计,大幅降低了部署门槛,即便是零基础用户也能完成操作。本文将基于2026年阿里云最新服务配置,详细拆解OpenClaw的一键部署流程,同时补充本地部署作为备选方案,并梳理常见问题排查方法,确保用户能够顺利落地这项服务。
872 1
|
4月前
|
机器学习/深度学习 传感器 边缘计算
工业互联网场景下,一体成型电感的应用趋势与解决方案
本文解析工业互联网下一体成型电感的高频化、微型化、国产化三大趋势,提出高频损耗优化、成本与灵活性平衡、极端工况适配三大落地解决方案,助力终端稳定、高效、可靠运行,赋能工业数字化转型。
247 1
|
6月前
|
人工智能 机器人 API
搭建全自动新闻推送 AI 机器人|OpenClaw阿里云/本地部署+API配置+联网+邮箱+定时全流程
2026年,信息爆炸已经成为所有人的痛点,尤其是AI、科技领域每天都有大量新动态,手动刷新闻既浪费时间又容易遗漏。借助OpenClaw(Clawdbot)这一开源智能体框架,我们可以轻松搭建一个**完全自动化的新闻推送机器人**:每天定时抓取指定领域新闻、自动总结核心内容、排版成美观格式,并准时发送到你的邮箱,实现“醒来即收早报”的自由。
1269 2
|
存储 监控 物联网
RFID室内资产定位让管理更简单
RFID室内资产定位技术利用射频信号实现资产精准定位与实时追踪,提升管理效率,减少人为错误,优化资源配置。通过标签、阅读器与后台系统协同工作,实现资产查找、监控、出入库、维护及数据分析等全流程智能化管理。
vcpkg 命令行工具的选项说明
vcpkg 命令行工具的选项说明
692 0
|
Java 开发者 Spring
深入解析:Spring AOP的底层实现机制
在现代软件开发中,Spring框架的AOP(面向切面编程)功能因其能够有效分离横切关注点(如日志记录、事务管理等)而备受青睐。本文将深入探讨Spring AOP的底层原理,揭示其如何通过动态代理技术实现方法的增强。
796 8
|
消息中间件 缓存 Shell
RT-Thread记录(十七、AT组件 — ESP8266使用 at_device 软件包联网)
AT 组件:RT-Thread 一个比较典型的组件, 解决了不同网络模块AT命令之间的差异导致的重复开发的问题,大幅度简化了MCU+无线模块方案开发。
2274 0
RT-Thread记录(十七、AT组件 — ESP8266使用 at_device 软件包联网)
|
安全 Shell PHP
escapeshellarg() 和 escapeshellcmd()
escapeshellarg() 和 escapeshellcmd()
|
消息中间件 Java 数据库连接
了解JMS
当下消息中间件盛行,主要提供了异步、解耦、削峰平谷的作用,其实早期Java本身也提供了类似的消息服务,在研习各个消息中间件之前应该先了解下这个历史。
539 0
了解JMS
|
数据采集 存储 移动开发
jsoup 框架的使用指南
jsoup 框架的使用指南
2197 0
jsoup 框架的使用指南

热门文章

最新文章