Base64编码 详解

Base64(基底64)是一种基于64个可打印字符来表示二进制数据的表示方法。
由于log2^6 = 64 所以每6个比特为一个单元,对应某个可打印字符。

3个字节相当于24个比特,对应于4个Base64单元,即3个字节可由4个可打印字符来表示。3个字节被 4个字符表示

在Base64中的可打印字符包括字母A-Z、a-z、数字0-9,这样共有62个字符,此外两个可打印符号在不同的系统中而不同。一些如uuencode的其他编码方法,和之后BinHex的版本使用不同的64字符集来代表6个二进制数字,但是不被称为Base64。

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

RFC 4648 标准的 Base64 索引表

十进制 二进制 字符 十进制 二进制 字符 十进制 二进制 字符 十进制 二进制 字符
0 000000 A 16 010000 Q 32 100000 g 48 110000 w
1 000001 B 17 010001 R 33 100001 h 49 110001 x00000
2 000010 C 18 010010 S 34 100010 i 50 110010 y00000
3 000011 D 19 010011 T 35 100011 j 51 110011 z00000
4 000100 E 20 010100 U 36 100100 k 52 110100 000000
5 000101 F 21 010101 V 37 100101 l 53 110101 100000
6 000110 G 22 010110 W 38 100110 m 54 110110 200000
7 000111 H 23 010111 X 39 100111 n 55 110111 300000
8 001000 I 24 011000 Y 40 101000 o 56 111000 400000
9 001001 J 25 011001 Z 41 101001 p 57 111001 500000
10 001010 K 26 011010 a 42 101010 q 58 111010 600000
11 001011 L 27 011011 b 43 101011 r 59 111011 700000
12 001100 M 28 011100 c 44 101100 s 60 111100 800000
13 001101 N 29 011101 d 45 101101 t 61 111101 900000
14 001110 O 30 011110 e 46 101110 u 62 111110 +00000
15 001111 P 31 011111 f 47 101111 v 63 111111 /00000
填充 =

在此例中,Base64算法将3个字节编码为4个字符。
image.png

如果要编码的字节数 不能被3整除,最后会多出1个或2个字节,那么可以使用下面的方法进行处理:先使用0字节值在末尾补足,使其能够被3整除,然后再进行Base64的编码。在编码后的Base64文本后加上一个或两个 = 号,代表补足的字节数。也就是说,当最后剩余两个八位(待补足)字节(2个byte)时,最后一个6位的Base64字节块有四位是0值,最后附加上两个等号;如果最后剩余一个八位(待补足)字节(1个byte)时,最后一个6位的base字节块有两位是0值,最后附加一个等号。

参考下表:当数据的最后 不足24bit 则补充0。
补了16bit,则尾部填充2个‘=’,最末的2*612bit 不查表,固定提升为等号
补了8bit,则尾部填充1个‘=’, 最末的1*6bit不查表,固定提升为等号

image.png

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

相关阅读更多精彩内容

友情链接更多精彩内容