5

编程小知识 之 Base64 编码

 3 years ago
source link: https://blog.csdn.net/tkokof1/article/details/113445864
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

编程小知识 之 Base64 编码

tkokof1 2021-01-30 20:26:52 28

本文简述了 Base64 编码的一些知识

在一些 支持可打印字符(而不(完善)支持其他字符) 的开发场景下(譬如原始的电子邮件中),为了能够传输存储二进制数据(广义上的非打印字符),我们需要一种将二进制数据转换为可打印字符的编码方式, Base64 就是这么一种编码方式.

Base64 编码的步骤如下:

  • 将待转换的字节数组(即二进制数据)按每 3 个字节分为一组(共 3 x 8 = 24 bit(二进制位))
  • 将上述 24 bit 按每 6 bit 一组重新分为 4 组
  • 分别计算上面 4 组的索引值(6 bit 一组)
  • 根据编码对照表完成转换

Base64 选用 ‘A-Z’ ‘a-z’ ‘0-9’ ‘+’ ‘/’ 这 64 个可打印字符作为编码字符,外加 ‘=’ 作为填充字符,具体的编码对照表如下所示:

数值字符数值字符数值字符数值字符0A16Q32g48w1B17R33h49x2C18S34i50y3D19T35j51z4E20U36k5205F21V37l5316G22W38m5427H23X39n5538I24Y40o5649J25Z41p57510K26a42q58611L27b43r59712M28c44s60813N29d45t61914O30e46u62+15P31f47v63/

现在我们来对二进制数据(如果用 ASCII 码表示的话就是字符串 ABC)进行 Base64 编码

010000010100001001000011 ( A B C ) 010000010100001001000011(ABC) 010000010100001001000011(ABC)

转换过程如下表所示:

文本 A B C ASCII编码 65 66 67 二进制位 010000010100001001000011索引 16 20 9 3 Base64编码 Q U J D

Base64 按 3个字节 分组编码,对于字节数组长度不是 3 字节倍数的情况,我们需要进行填充: 先使用 0 字节值在末尾补足,使字节数组长度能够被 3 整除,然后再进行 Base64 编码,最后在编码后的 Base64 文本后加上一个或两个 ‘=’ 号, 用以代表补足的字节数.

下面的示例展示了以下二进制数据的转换过程:

01000001 ( A ) 0100001001000011 ( B C ) 01000001(A) \\ 0100001001000011(BC) 01000001(A)0100001001000011(BC)

文本 A ASCII编码 65 二进制位 01000001 二进制位(补0) 010000010000000000000000 索引 16 16 Base64编码 Q Q = = 文本 B C ASCII编码 66 67 二进制位 0100001001000011 二进制位(补0) 010000100100001100000000 索引 16 36 12 Base64编码 Q k M =

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK