Base 64 简介

Base 64 简介

Base 64 是一种基于 64 个可打印字符表示二进制数据的表示方法。

由于 2^6 = 64,所以每 6 位为一个单元,对应一个可打印字符串。4 个可打印字符(Base 64 单元)则对应 3 字节(24bit = 8 byte)。

它可以用来传输电子邮件中非 ASCII 码的字符(早期设计目的)。

但其有着更重要的意义:

  • 所有的二进制文件,都可以因此转化为可打印的文本编码,使用文本软件进行编辑
  • 能够对文本进行简单的加密

Base 64 常用于一些处理文本数据的场合,如表示、存储、传输一些二进制数据。(MIME 的电子邮件以及 XML 的一些复杂数据等)

Base 64 转换规则

以 6 位为一个单元,那么显然其包括 64 个字符(大写字母 A-Z,小写字母 a-z,数字 0-9,加号 +,斜杠 / )。

传输的字节数不一定是3的倍数,可能最后需要作为后缀的还有一个等号 = 字符。

转换为 Base 64 后的数据比原始数据略长(大约是原来的 4/3 倍)。

具体规则如下:

  1. 每 3 个字节(Byte)作为一组,一共 24 个二进制位(bit)。
  2. 将 24 个二进制位分成 4 组,每组有 6 个二进制位。
  3. 每组前面加 2 个 0x00 ( 8 bit ),扩展为 32 个二进制,即 4 个字节。
  4. 按照以下表格,转为对应的符号,这就是 Base 64 的编码值。

/*  0 -  7: 000000 - 000111 */   'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
/*  8 - 15: 001000 - 001111 */   'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
/* 16 - 23: 010000 - 010111 */   'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
/* 24 - 31: 011000 - 011111 */   'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f',
/* 32 - 39: 100000 - 100111 */   'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
/* 40 - 47: 101000 - 101111 */   'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
/* 48 - 55: 110000 - 110111 */   'w', 'x', 'y', 'z', '0', '1', '2', '3',
/* 56 - 63: 111000 - 111111 */   '4', '5', '6', '7', '8', '9', '+', '/'

举例说明,以文本 Man 说明:

文本 M a n
ASCII 编码 77 97 110

文本 0 7 0 7 0 7
二进制位 0 1 0 0 1 1 0 1 0 1 1 0 0 0 0 1 0 1 1 0 1 1 1 0
Base 64 0 5 0 5 0 5 0 5

Base 64 值 19(010011) 22(010110) 5(000101) 46(101110)
Base 64 编码 T W F u
传输 Base 64 值 19(00010011) 22(00010110) 5(00000101) 46(00101110)

传出的末尾可能会多出 1 个或 2 个字节的数据(3个字节才能对应 4 个 Base 64 单元)。

需要用以下方式处理。

文本(1 Byte) A(01000001) 补充的部分(00000000) 补充的部分(00000000)
Base 64 编码 Q(010000) Q(010000) = (000000) = (000000)

文本(1 Byte) B(01000010) C(01000011) 补充的部分(00000000)
Base 64 编码 Q(010000) k(100100) M(001100) = (000000)

末尾的 000000 采用 = 符号

用于 URL 的改进 Base 64 编码

URL 传输对于 =+/ 字符都有其特殊的用意(用于 URL 编解码和数据库存储时),使用标准 Base 64 现在回带来转换的麻烦。

针对 URL 的改进 Base 64 编码则是不在末尾填充 = 号,且把 + 号改成 -/ 号改成 _

用于正则表达式的改进 Base 64 变种

+ 改为 ! (在正则表达式有特殊含义)

/ 改为 - (在正则表达式有特殊含义)

还有 *+/ * 改为 _-._ (用作编程语言中的标识符名称)或 .- (用于 XML 中的Nmtoken)或 _:(用于 XML 中的Name)

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 使用excel处理数据的时候会遇到这样的复杂情况,直接转换成xml语句遇到问题,于是打算转换成sql语句这里用的是...
    李2牛阅读 7,265评论 0 0
  • 1,有的时候我坐在床边看书或者玩手机,双脚自然的垂在地上。蛋挞就从床底伸出软软的小舌头舔我的脚,把我弄得痒痒的很想...
    莲喵喵阅读 1,661评论 0 0
  • 梨花烟雨清明,万物逢春,离人千里诉相思,诉不尽心中惆怅; 翠柳青山共赏,百花相迎,伊人痴酒醉清风,醉不出满腹情愁。
    不灬良人阅读 1,607评论 1 1
  • 内训师如何提升备课效率 1 为什么 1.1 现状 1.1.1 内训师备课效率低,影响培训绩效。 第三季度时,公司的...
    无忧侠阅读 1,211评论 0 0

友情链接更多精彩内容