暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

细说 Base64

技术账本 2021-11-26
358

base64 介绍

Base64是一种基于64个可打印字符来表示二进制数据的表示方法。由于 2^6=64
,所以每6个比特为一个单元,对应某个可打印字符。3个字节相当于24个比特,对应于4个Base64单元,即3个字节可由4个可打印字符来表示。在Base64中的可打印字符包括字母A-Z
a-z
、数字0-9
,这样共有62
个字符,此外两个可打印符号在不同的系统中而不同。

Base64常用于在通常处理文本数据的场合,表示、传输、存储一些二进制数据,包括MIME的电子邮件及XML的一些复杂数据。

为什么要base64

ASCII码一共规定了128个字符的编码,这128个符号,范围在[0,127]之间。

其中 [0,31] 和 127 这33个属于不可打印的控制字符。

在电子邮件传输信息时,有些邮件网关会把[0,31]这些控制字符给悄悄清除。还有的早期程序收到[128,255]之间的国际字符时,甚至会发生错误。

如何在不同邮件网关之间安全的传输控制字符,国际字符,甚至二进制文件?

于是作为MIME多媒体电子邮件标准的一部分 base64
被开发出来。

base64怎么工作的?

字符串 Hello world
在经过base64 编码之后变成 SGVsbG8gV29ybGQ=

  • 编码"Hel" 的结果为 SGVs
    , 详细原理如下:

Base64索引表

如果要编码的字节数不能被3整除,最后会多出1个或2个字节,那么可以使用下面的方法进行处理:

先使用0字节值在末尾补足,使其能够被3整除,然后再进行Base64的编码。

在编码后的Base64文本后加上一个或两个=号,代表补足的字节数。也就是说,当最后剩余两个八位(待补足)字节(2个byte)时,最后一个6位的Base64字节块有四位是0值,最后附加上两个等号;

如果最后剩余一个八位(待补足)字节(1个byte)时,最后一个6位的base字节块有两位是0值,最后附加一个等号。

参考下表:

什么是url_safe base64编码?

标准的Base64
并不适合直接放在URL
里传输,因为URL
编码器会把标准Base64
中的/
+
字符变为形如%XX
的形式,而这些%
号在存入数据库时还需要再进行转换,因为ANSI SQL
中已将%
号用作通配符。

为解决此问题,可采用一种用于UR
L的改进Base64
编码(url_safe_base64
),它将标准Base64
中的+
/
分别改成了-
_
,这样就免去了在URL编解码和数据库存储时所要做的转换,避免了编码信息长度在此过程中的增加,并统一了数据库、表单等处对象标识符的格式。


文章转载自技术账本,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论