Base64编码是一个将二进制数据转换为ASCII字符串格式的过程GyD.F4.y2B.一种二进制数据GyD.F4.y2B.一种转换为6位字符表示。当二进制数据(如图像或视频)在设计成以明文(ASCII)格式传输数据的系统上传输时,就使用Base64编码方法。GyD.F4.y2B.一种
为什么使用Base64编码?GyD.F4.y2B.一种
对Base64编码的需求来自于媒体传输时出现的问题GyD.F4.y2B.一种原始的二进制格式GyD.F4.y2B.一种到基于文本的系统。GyD.F4.y2B.一种
因为基于文本的系统(比如GyD.F4.y2B.一种电子邮件GyD.F4.y2B.一种)将二进制数据解释为广泛的字符,包括特殊命令字符,这些系统的大部分二进制数据被那些系统误解或在传输过程中丢失或损坏。GyD.F4.y2B.一种
以避免这种传输问题的方式编码这种二进制数据的一种方法是以Base64编码格式将其作为纯版ASCII文本发送。这是MIME标准使用的技术之一,以发送除纯文本之外的数据。GyD.F4.y2B.一种
许多编程语言,例如PHP和JavaScript,包括Base64编码和解码功能,以便解释使用Base64编码发送的数据。GyD.F4.y2B.一种
Base64编码逻辑GyD.F4.y2B.一种
Base64编码将二进制数据分解为3个完整字节的6位段,并在ASCII标准中将其表示为可打印字符。它基本上分两步完成。GyD.F4.y2B.一种
第一步是将二进制字符串分解为6位块。Base64只使用6位(对应于2^6 = 64个字符)来确保编码后的数据是可打印和人类可读的。不使用ASCII中可用的任何特殊字符。GyD.F4.y2B.一种
64个字符(因此名称Base64)包括10个数字、26个小写字符、26个大写字符以及加号(+)和正斜杠(/)。还有一个第65个字符称为aGyD.F4.y2B.一种软垫GyD.F4.y2B.一种,即等号(=)。当二进制数据的最后一段不包含完整的6位时,使用此字符。GyD.F4.y2B.一种
Base64编码示例GyD.F4.y2B.一种
例如,采用三个ASCII号码155,162和233.这三个数字构成了100110111010001011101001的二进制流。与图像一样,二进制文件包含运行的二进制流,用于数十积或数十万个零零。GyD.F4.y2B.一种
Base64编码器首先将二进制流分成6个字符组:100110 11101000 001011 101001。每一组都可以翻译成数字38、58、11和41。GyD.F4.y2B.一种
六个字符的二进制流通过用其位置方形的二进制序列的每个值平衡由1个表示的每个值平衡二进制(或基本-2)到十进制(基本-10)字符之间。从右侧开始,向左移动,并以零开始,二进制流中的值表示2 ^ 0,然后2 ^ 1,然后2 ^ 2,然后2 ^ 3,然后2 ^ 4,然后2 ^ 4。GyD.F4.y2B.一种
这是另一种看它的方法。从左侧开始,每个位置值1,2,4,8,16和32.如果二进制数有1个插槽中的1,则添加该值;如果插槽中有一个0,则不。二进制字符串100110转换为十进制数38:0 * 2 ^ 01 + 1 * 2 ^ 1 + 1 * 2 ^ 2 + 0 * 2 ^ 3 + 0 * 2 ^ 4 + 1 * 2 ^ 5 = 0 + 2+ 4 + 0 + 0 + 32。GyD.F4.y2B.一种
Base64编码采用此二进制串并将其分解为6位值38,58,11和41。GyD.F4.y2B.一种
最后,使用Base64编码表将这些数字转换为ASCII字符。本例中的6位值转换为ASCII序列GyD.F4.y2B.一种M6LP.GyD.F4.y2B.一种。GyD.F4.y2B.一种
使用Base64转换表:GyD.F4.y2B.一种
- 38是M.GyD.F4.y2B.一种
- 58是6GyD.F4.y2B.一种
- 11 LGyD.F4.y2B.一种
- 41是p.GyD.F4.y2B.一种
这两个步骤的过程应用于编码的整个二进制字符串。GyD.F4.y2B.一种
为了确保编码数据能够正确打印并且不超过任何邮件服务器的行长度限制,将插入换行字符以保持行长度低于76个字符。换行符的编码方式与所有其他数据一样。GyD.F4.y2B.一种
Base64编码的全部目的,从添加填充以保留3字节二进制段以使用Base64表将二进制文件转换为文本,是保留发送的二进制信息的完整性。GyD.F4.y2B.一种
Base64编码表GyD.F4.y2B.一种
下表翻译了Base64编码中使用的所有64个字符。GyD.F4.y2B.一种
Base64编码表GyD.F4.y2B.一种 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
价值GyD.F4.y2B.一种 | 字符GyD.F4.y2B.一种 | 价值GyD.F4.y2B.一种 | 字符GyD.F4.y2B.一种 | 价值GyD.F4.y2B.一种 | 字符GyD.F4.y2B.一种 | 价值GyD.F4.y2B.一种 | 字符GyD.F4.y2B.一种 | |||
0.GyD.F4.y2B.一种 | 一种GyD.F4.y2B.一种 | 16.GyD.F4.y2B.一种 | 问:GyD.F4.y2B.一种 | 32.GyD.F4.y2B.一种 | GGyD.F4.y2B.一种 | 48.GyD.F4.y2B.一种 | W.GyD.F4.y2B.一种 | |||
1GyD.F4.y2B.一种 | B.GyD.F4.y2B.一种 | 17.GyD.F4.y2B.一种 | R.GyD.F4.y2B.一种 | 33.GyD.F4.y2B.一种 | HGyD.F4.y2B.一种 | 49.GyD.F4.y2B.一种 | XGyD.F4.y2B.一种 | |||
2GyD.F4.y2B.一种 | CGyD.F4.y2B.一种 | 18.GyD.F4.y2B.一种 | S.GyD.F4.y2B.一种 | 34.GyD.F4.y2B.一种 | 一世GyD.F4.y2B.一种 | 50.GyD.F4.y2B.一种 | yGyD.F4.y2B.一种 | |||
3.GyD.F4.y2B.一种 | D.GyD.F4.y2B.一种 | 19.GyD.F4.y2B.一种 | T.GyD.F4.y2B.一种 | 35.GyD.F4.y2B.一种 | jGyD.F4.y2B.一种 | 51.GyD.F4.y2B.一种 | Z.GyD.F4.y2B.一种 | |||
4.GyD.F4.y2B.一种 | E.GyD.F4.y2B.一种 | 20.GyD.F4.y2B.一种 | 你GyD.F4.y2B.一种 | 36.GyD.F4.y2B.一种 | K.GyD.F4.y2B.一种 | 52.GyD.F4.y2B.一种 | 0.GyD.F4.y2B.一种 | |||
5.GyD.F4.y2B.一种 | FGyD.F4.y2B.一种 | 21.GyD.F4.y2B.一种 | V.GyD.F4.y2B.一种 | 37.GyD.F4.y2B.一种 | L.GyD.F4.y2B.一种 | 53.GyD.F4.y2B.一种 | 1GyD.F4.y2B.一种 | |||
6.GyD.F4.y2B.一种 | GGyD.F4.y2B.一种 | 22.GyD.F4.y2B.一种 | W.GyD.F4.y2B.一种 | 38.GyD.F4.y2B.一种 | mGyD.F4.y2B.一种 | 54.GyD.F4.y2B.一种 | 2GyD.F4.y2B.一种 | |||
7.GyD.F4.y2B.一种 | HGyD.F4.y2B.一种 | 23.GyD.F4.y2B.一种 | XGyD.F4.y2B.一种 | 39.GyD.F4.y2B.一种 | NGyD.F4.y2B.一种 | 55.GyD.F4.y2B.一种 | 3.GyD.F4.y2B.一种 | |||
8.GyD.F4.y2B.一种 | 一世GyD.F4.y2B.一种 | 24.GyD.F4.y2B.一种 | yGyD.F4.y2B.一种 | 40GyD.F4.y2B.一种 | O.GyD.F4.y2B.一种 | 56.GyD.F4.y2B.一种 | 4.GyD.F4.y2B.一种 | |||
9.GyD.F4.y2B.一种 | jGyD.F4.y2B.一种 | 25.GyD.F4.y2B.一种 | Z.GyD.F4.y2B.一种 | 41.GyD.F4.y2B.一种 | P.GyD.F4.y2B.一种 | 57.GyD.F4.y2B.一种 | 5.GyD.F4.y2B.一种 | |||
10.GyD.F4.y2B.一种 | K.GyD.F4.y2B.一种 | 26.GyD.F4.y2B.一种 | 一种GyD.F4.y2B.一种 | 42.GyD.F4.y2B.一种 | 问:GyD.F4.y2B.一种 | 58.GyD.F4.y2B.一种 | 6.GyD.F4.y2B.一种 | |||
11.GyD.F4.y2B.一种 | L.GyD.F4.y2B.一种 | 27.GyD.F4.y2B.一种 | B.GyD.F4.y2B.一种 | 43.GyD.F4.y2B.一种 | R.GyD.F4.y2B.一种 | 59.GyD.F4.y2B.一种 | 7.GyD.F4.y2B.一种 | |||
12.GyD.F4.y2B.一种 | mGyD.F4.y2B.一种 | 28.GyD.F4.y2B.一种 | CGyD.F4.y2B.一种 | 44.GyD.F4.y2B.一种 | S.GyD.F4.y2B.一种 | 60.GyD.F4.y2B.一种 | 8.GyD.F4.y2B.一种 | |||
13.GyD.F4.y2B.一种 | NGyD.F4.y2B.一种 | 29.GyD.F4.y2B.一种 | D.GyD.F4.y2B.一种 | 45.GyD.F4.y2B.一种 | T.GyD.F4.y2B.一种 | 61.GyD.F4.y2B.一种 | 9.GyD.F4.y2B.一种 | |||
14.GyD.F4.y2B.一种 | O.GyD.F4.y2B.一种 | 30.GyD.F4.y2B.一种 | E.GyD.F4.y2B.一种 | 46.GyD.F4.y2B.一种 | 你GyD.F4.y2B.一种 | 62.GyD.F4.y2B.一种 | +GyD.F4.y2B.一种 | |||
15.GyD.F4.y2B.一种 | P.GyD.F4.y2B.一种 | 31.GyD.F4.y2B.一种 | FGyD.F4.y2B.一种 | 47.GyD.F4.y2B.一种 | V.GyD.F4.y2B.一种 | 63.GyD.F4.y2B.一种 | /GyD.F4.y2B.一种 |
解决最终名称GyD.F4.y2B.一种
在编码过程结束时,可能存在问题。如果以字节为单位的原始数据的大小是三倍,则一切都正常工作。如果不是,可能有空字节。为了正确编码,需要恰好3字节的二进制数据。GyD.F4.y2B.一种
解决方案是添加足够的值为0的字节来创建3字节组。如果数据需要额外的数据字节,则会附加两个这样的值,如果数据需要额外的数据字节,则会附加一个额外的值。GyD.F4.y2B.一种
当然,这些人为的末尾'0'不能使用下面的编码表进行编码。它们必须用第65个字符表示。Base64填充字符是等号(=),放置在编码数据的末尾。GyD.F4.y2B.一种