BASE64 编码简析

Base64编码:

<1>·Base64编码简介:

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

<2>·使用Base64的原因:

               在计算机中任何数据都是按ascii码存储的,而ascii码的128~255之间的值是不可见字符。而在网络上交换数据时,比如说从A地传到B地,往往要经过多个路由设备,由于不同的设备对字符的处理方式有一些不同,这样那些不可见字符就有可能被处理错误,这是不利于传输的。

               所以就先把数据先做一个Base64编码,统统变成可见字符,这样出错的可能性就大降低了。其实BASE64编码的初衷是为了满足电子邮件中不能直接使用非ASCII码字符的规定,但是也有其他重要意义:所有的二进制文件,都可以因此转化为可打印的文本编码,使用文本软件进行编辑,并且对于数据流来说是一种简单的加密。

               比如说,在Internet里,E-mail的传送是只能传送US-ASCII格式的文字讯息(历史原因),ASCII是7位的,而非ASCII格式的档案,在传送过程中若不先经过编码,先编成7位再传送,则在传送过程中会因为这7位元的限制而遭到拆解,拆解之后只会让收信方看到一堆乱七八糟不知所云的东西。经过编码后的资料,在传送过程中才可顺利传送,不会有“被截掉一个bit”的危险,但是收信方必须具有解码程序,将这份经过编码的东西还原,才能解读“天书”,看到寄信人要传送的真实信息。再比如传输一个纯文本协议,二进制中可能会出现被当做控制字符处理的部分。这样引起传输失败。

<3>·编码原理:

                 所谓Base64,就是说选出64个可打印字符—-小写字母a-z、大写字母A-Z、数字0-9、符号”+”、”/”(再加上作为补全字的”=”,实际上是65个字符),作为一个基本字符集。然后,其他所有符号都转换

成这个字符集中的字符。

     1.将每三个字节作为一组,一共是24个二进制位。

     2.将这24个二进制位分为四组,每个组有6个二进制位。

     3.在每组前面加两个00,扩展成32个二进制位,即四个字节。

     4.如果字节数不足三,则这样处理:

                a)二个字节的情况:将这二个字节的一共16个二进制位,按照上面的规则,转成三组,最后一组除了前面加两个0以外,后面也要加两个0。这样得到一个三位的Base64编码,再在末尾补上一个”=”号。

                b)一个字节的情况:将这一个字节的8个二进制位,按照上面的规则转成二组,最后一组 除了前面加二个0以外,后面再加4个0。这样得到一个二位的Base64编码,再在末尾补上两个”=”号

            备注:然而,标准的Base64并不适合直接放在URL里传输,因为URL编码器会把标准Base64中的“/”和“+”字符变为形如“%XX”的形式,而这些“%”号在存入数据库时还需要再进行转换,因为ANSI SQL中已将“%”号用 作通配符。为解决此问题,可采用一种用于URL的改进Base64编码,它不仅在末尾去掉填充的'='号,并将标准 Base64中的“+”和“/”分别改成了“-”和“_”,这样就免去了在URL编解码和数据库存储时所要作的转换,避免了编码信息长度在此过程中的增加,并统一了数据库、表单等处对象标识符的格式。

                   另有一种用于正则表达式的改进Base64变种,它将“+”和“/”改成了“!”和“-”,因为“+”,“*”在正则表达式中都可能具有特殊含义。此外还有一些变种,它们将“+/”改为“_-”或“._”(用作编程语言中的标识符名称)或“.-”(用于XML中的Nmtoken)甚至“_:”(用于XML中的Name)。

              编码后的数据比原始数据略长,为原来的4/3{\displaystyle {\frac {4}{3}}}4、34/3dsad  dw。在电子邮件中,根据RFC 822规定,每76个字符,还需要加上一个回车换行。可以估算编码后数据长度大约为原长的135.1%。

<4>·实例:

编码: Man:

BASE64 编码简析_第1张图片
图片1.png

位数不足情况


BASE64 编码简析_第2张图片
图片2.png

你可能感兴趣的:(BASE64 编码简析)