Base64编码及其作用

Base64编码方式

base64是网络上最常见的传输编码方式,说到底其实就是一种非常简单的转换算法。

转换方式是这样的:先将三个byte(1byte=8bit)的数据转换为ascll码二进制值,按序放入一个24bit的缓冲区中。若数据不足3byte,缓冲区中剩下的bit用0补足。

然后,每次取出6个bit,按照其索引值选择
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/

中的字符作为编码后的输出。不断进行,直到全部输入数据转换完成。

如转换“Man”:
M的ascll码是77,二进制就是01001101,取前六位就是010011=19,19在索引表中对应T,那么就输出T。
M剩余的两个bit(01)就和后面的bit结合为六位010110=22,对应W,如此往复。

这个算法的精髓在于:24=3x8=4x6,即可将明文的3个字节转化为base64的4个字节。
当原数据长度不是3的整数倍时,如果最后剩一个输入数据,在编码结果后加2个“=”;剩两个就加1个“=”,补足为3的整数倍。

Base64编码作用

  1. 便于网络传输。

  2. 不可见性。

(一)Encoding VS. Encryption

很多人都以为编码(Encoding)加密(Encryption)是同一个意思。编码和加密都是对格式的一种转换,但是它们是有区别的。编码是 公开的,比如下面要介绍的Base 64编码,任何人都可以解码;而加密则相反,你只希望自己或者特定的人才可以对内容进行解密。

(二)Base 64编码

Base 64 Encoding有什么用?举个简单的例子,你使用SMTP协议 (Simple Mail Transfer Protocol 简单邮件传输协议)来发送邮件。因为这个协议是基于文本的协议,所以如果邮件中包含一幅图片,我们知道图片的存储格式是二进制数据(binary data),而非文本格式,我们必须将二进制的数据编码成文本格式,这时候Base 64 Encoding就派上用场了。

Base64编码的作用:由于某些系统中只能使用ASCII字符。Base64就是用来将非ASCII字符的数据转换成ASCII字符的一种方法。它使用下面表中所使用的字符与编码。

而且base64特别适合在http,mime协议下快速传输数据。

base64其实不是安全领域下的加密解密算法。虽然有时候经常看到所谓的base64加密解密。其实base64只能算是一个编码算法,对数据内容进行编码来适合传输。虽然base64编码过后原文也变成不能看到的字符格式,但是这种方式很初级,很简单。

X.509公钥证书也好,电子邮件数据也好,经常要用到Base64编码,那么为什么要作一下这样的编码呢?

我们知道在计算机中任何数据都是按ascii码存储的,而ascii码的128~255之间的值是不可见字符。而在网络上交换数据时,比如说从A地传到B地,往往要经过多个路由设备,由于不同的设备对字符的处理方式有一些不同,这样那些不可见字符就有可能被处理错误,这是不利于传输的。所以就先把数据先做一个Base64编码,统统变成可见字符,这样出错的可能性就大降低了。

如一个xml当中包含另一个xml数据,此时如果将xml数据直接写入显然不合适,将xml进行适当编码存入较为方便,事实上xml当中的字符一般都是可见字符(0-127之间),但是由于中文的存在,可能存在不可见字符,直接将字符打印在外层xml的数据中显然不合理,那么怎么办呢?
可以使用base64进行编码,然后存入xml,解码反之
其实还有个办法,将byte的值写在xml当中,空格或者,分开,这样也可以将byte数据传入,不过这样更浪费空间,并且不易保存.

另一个,比如http协议当中的key value字段,必须进行URLEncode 不然出现的等号可能使解析失败 空格也会使http请求解析出现问题,比如 请求行就是以空格来划分的 POST /guowuxin/hehe HTTP/1.1

又比如有些文本协议不支持不可见字符的传递,只能用大于32的可见字符来传递信息(协议规定)

posted @ 2022-04-13 16:04  又一岁荣枯  阅读(117)  评论(0编辑  收藏  举报