当前位置: 首页 编码 Base-64
编码说明

Base64(基底64)是一种基于64个可打印字符来表示二进制数据的表示方法。由于log2⁡64=6 ,所以每6个比特为一个单元,对应某个可打印字符。3个字节相当于24个比特,对应于4个Base64单元,即3个字节可由4个可打印字符来表示。在Base64中的可打印字符包括字母A-Z、a-z、数字0-9,这样共有62个字符,此外两个可打印符号在不同的系统中而不同。一些如uuencode的其他编码方法,和之后BinHex的版本使用不同的64字符集来代表6个二进制数字,但是不被称为Base64。

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

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

Base64编码通常用于在不支持二进制传输或存储的系统中传输二进制数据。例如,通过电子邮件发送二进制附件时,需要对二进制数据进行Base64编码,以确保可靠传输。

编码

  1. 第一步,将每三个字节作为一组,一共是24个二进制位。
  2. 第二步,将这24个二进制位分为四组,每个组有6个二进制位。
  3. 第三步,在每组前面加两个00,扩展成32个二进制位,即四个字节。
  4. 第四步,根据上表,得到扩展后的每个字节的对应符号,这就是Base64的编码值。
  5. 如果原始数据的字节数不是3的倍数,Base64编码需要在末尾添加填充字符。通常使用字符"="作为填充字符,以确保编码后的数据长度是4的倍数。

注意:

base64不适合通过url传递,因为base64中的 +和= 和url中的编码冲突。URL编码器会把标准Base64中的/和+字符变为形如%XX的形式。为解决此问题,可采用一种用于URL的改进Base64编码,它不在末尾填充=号,并将标准Base64中的+和/分别改成了-和_,这样就免去了在URL编解码和数据库存储时所要做的转换
因为是将3个字节编码为4个字节,因此Base64编码会膨胀数据大小,大概膨胀1/3大小

解码
将Base64编码的数据解码回原始二进制数据的过程称为Base64解码。解码可以通过将每个Base64字符转换回6比特的二进制值,然后将这些二进制值组合起来得到原始二进制数据。

其他
垃圾消息传播者用Base64来避过反垃圾邮件工具,因为那些工具通常都不会翻译Base64的消息。
在LDIF文件,Base64用作编码字符串。

应用场景
Base64编码广泛应用于各种领域,包括电子邮件、数据传输、图像处理、数据存储和加密算法等。例如,在Web开发中,Base64编码常用于将图像数据嵌入到HTML或CSS中。