HTTP知多少——Base64编码

Base64已经成为网络上常见的传输8Bit字节码的编码方式之一。在做支付系统时,系统之间的报文交互都需要使用Base64对明文进行转码,然后再进行签名或加密,之后再进行传输。那么Base64到底起到的什么作用呢?

1. 为什么要使用Base64编码

在计算机中任何数据都是按照ASCII码存储的,而ASCII码的128-255之间的值是不可见字符。而在网络上交互数据时。往往需要经过多个路由设备,由于不同的设备对字符处理的方式有一些不同,这样那些不可见字符就有可能被处理错误,不利于传输。所以就先把数据做一个Base64的编码,统统变成可见字符,这样出错的可能性就大大降低。

Base64编码的初衷是为了满足电子邮件中不能直接使用非ASCII码字符的规定。早些的一些传输协议,例如传输邮件的SMTP协议,只能传输可打印的ASCII字符,导致原本8bit的字节码(范围是0-225)超过了可用的范围。这时候,便可以利用4个Base64字符来表示3个传统的8bit字符。

2. Base64的转换原理

2.1 Base64转换过程

  1. 将待转换的字符串每三个字节分为一组,每个字节占8bit,那么共有24个二进制位。
  2. 将上面的24个二进制位每6个一组,共分为4组。
  3. 在每组前面添加两个0,每组由6个变为8个二进制位,总共32个二进制位,即四个字节。
  4. 根据Base64编码对照表获得对应的值。

需要注意的是:

  1. Base64字符表中的字符原本用6个bit就可以表示,现在前面添加了2个0,变成了8bit,会造成一定的浪费。因此,Base64编码之后的文本,要比原文长大约3分之一。
  2. 为什么使用3个字节一组?因为6和8的最小公倍数为24,三个字节正好24个二进制位,每6个bit位一组,正好能够分成4组。

2.2 位数不足的情况

上面是按照3个字节来举例说明的,但是字节数若不足3个,该如何让处理?

1. 两个字节的处理
两个字节共16个二进制位,依旧按照规则进行分组,每6个字节一组,第三组缺少2位,后面使用2个0补齐6位。得到三个Base64编码,第四组完全没有数据,则使用=补上。

2. 一个字节的处理
一个字节共8个二进制位,依旧按照规则进行分组。此时共8个二进制位,每6个一组,则第二组缺少4位,用0补齐,得到两个Base64编码,而后面两组没有对应数据,都用“==”补上。

3. Base64加密的注意事项

  1. 大多数编码都是字符串转化为二进制的过程,而Base64的编码则是从二进制转换成字符串。与常规相反。
  2. Base64编码用于传输、存储、表示二进制领域,不能算得上加密,只是无法直接看到明文。
  3. 中文的多种编码(比如UTF-8、gb2312、gbk等),不同编码对应Base64编码结果不一样。

文章参考
一篇文章彻底弄懂Base64编码原理

你可能感兴趣的:(HTTP知多少——Base64编码)