跳转至

Base64原理

在使用base64库解码时,网络传输等收到的encode_str可能有问题,所以需要捕获异常,try catch decode函数。

Base64是一种用64个字符表示任意二进制数据的编码方法。其设计目的是在文本数据中存储、处理和传输二进制数据。它经常用于在不支持二进制数据的环境中转换二进制数据(例如,发送电子邮件),因为传统的文本协议(如SMTP)通常不支持原始的二进制数据。

Base64编码方法使用以下64个字符:

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
这些字符代表了64个可能的6位数值(从0到63)。Base64还使用了一个特殊的填充字符(通常是等号=),用于在最后一个编码块不足4个字符时填充。

0.1 Base64编码的步骤如下:

  1. 将二进制数据分成3个字节(24位)的块。如果数据的总长度不是3的倍数,那么在末尾添加足够的零位(padding)使其长度成为3的倍数。

  2. 将这24位数据分成4个6位的组。每个6位组现在可以看作是一个0到63之间的数值。

  3. 对应每个6位的数值,使用Base64字符集找到对应的字符。

  4. 如果原始二进制数据的长度不是3的倍数,那么在编码的结果中相应位置使用=字符进行填充,以保证Base64编码的总长度是4的倍数。

0.2 例子:

假设我们有以下ASCII字符串:“Man”,其二进制表示为:

'M'        'a'        'n'  
01001101  01100001  01101110  

按3个字节一组,我们有24位二进制数据:

`010011010110000101101110`

将这24位分成4组6位的二进制数:

010011  010110  000101  101110

将这些6位二进制数转换成十进制:

19    22    5     46

找到这些数值在Base64字符集中对应的字符:

T     W     F     u

因此,”Man”经过Base64编码后变为:“TWFu”。

Base64编码是可逆的,也就是说,可以从Base64编码的字符串中恢复原始的二进制数据。解码过程实际上是编码过程的逆过程:将Base64字符串转换回二进制数据,然后再将二进制数据转换回原始格式。

Base64编码的输出比原始二进制数据大约增加了33%,因为每3个字节的数据被转换成了4个字节的Base64字符。这种空间开销是可接受的代价,以便能在只支持文本数据的系统中传输二进制数据。

评论