一篇文章彻底弄懂 base64 及原理!

本文详细介绍了Base64编码的原理,包括它如何将二进制数据转换为文本格式,以及在HTTP、FTP、SMTP等协议中的应用。Base64编码常用于将二进制数据如图片、文件转换为文本形式进行传输。此外,文章还讨论了Base64编码的变种Base64url,并解释了编码过程中不足24位时的填充规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

按:base64如今仍然是常见的编码方式,尤其是在“原始数据是二进制,而传输协议只支持文本”的场合。可惜的是,许多开发人员并不清楚其中的原理,只知道“看起来毫无意义,但又有一大堆等号的”就是base64。恰好, 我的朋友胡永浩写了这篇文章,深入浅出讲解了base64,值得认真阅读。

一篇文章彻底弄懂 base64 及其原理

Python资源共享群:484031800

Base32, Base64

Base32 是一个  binary-to-text encoding [1] schemes,顾名思义,就是将二进制数据转换为编码只有基础 32 个字符的数据编码方式, Base64 则是 64 个。注意编码不等同于加密,网上有误解 Base 编码方式为加密方式,实际上标准 Base64 编码解码无需额外信息即完全可逆。

Base 编码常见用途如下:

如定义所言,binary to text

一些协议如 HTTP , FTP (File Transfer Protocol) [当指定发送文本时], SMTP (Simple Mail Transfer Protocol) 是 text-based protocol ,也就是只支持文本传输,不支持二进制传输。是的,http 上传文件,图片时使用的 multipart/form-data 也是需要转成文本的。

所以附件如图片,文件等(binary)就可以用 Base64 编码为 text再传输。

将资源编码为字符串

如  data URI scheme [2] 定义了如下语法来识别网页中的资源:

<span style="max-width: 1000%;box-sizing: border-box;overflow-wrap: break-word !important;"> data:[&lt;media type&gt;][;base64],&lt;data&gt;</span>

HTML 中可以在标签中指定识别 Base64编码 来展示资源,

<span style="max-width: 1000%;box-sizing: border-box;overflow-wrap: break-word !important;">&lt;div&gt;</span>

<span style="max-width: 1000%;box-sizing: border-box;overflow-wrap: break-word !important;"> &lt;p&gt;Taken from wikpedia&lt;/p&gt;</span>

<span style="max-width: 1000%;box-sizing: border-box;overflow-wrap: break-word !important;"> &lt;img src=&quot;data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAAUA</span>

<span style="max-width: 1000%;box-sizing: border-box;overflow-wrap: break-word !important;"> AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO</span>

<span style="max-width: 1000%;box-sizing: border-box;overflow-wrap: break-word !important;"> 9TXL0Y4OHwAAAABJRU5ErkJggg==&quot; alt=&quot;Red dot&quot; /&gt;</span>

<span style="max-width: 1000%;box-sizing: border-box;overflow-wrap: break-word !important;">&lt;/div&gt;</span>

但因为 Base64 是每 3 个原始字符编码成 4 个字符,不够时补 = (下文会详述),因此编码后的大小是有可能会比原文件大的,所以 html 用 Base64 来展示图片而不是用具体的图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值