Base64

1byte(字节) = 8 bit(比特)

字节(Byte )是计算机信息技术用于计量存储容量的一种计量单位,作为一个单位来处理的一个二进制数字串,是构成信息的一个小单位。最常用的字节是八位的字节,即它包含八位的二进制数。

 

Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。

Base 64主要用途不是加密,而是把一些二进制数转成普通字符,方便在网络上传输。 由于一些二进制字符在传输协议中属于

控制字符,不能直接传送,所以需要转换一下才可以。由于某些系统中只能使用ASCII字符,Base64就是用来将非ASCII字符的数

据转换成ASCII字符的一种方法,Base64特别适合在http,mime协议下快速传输数据。比如网络中图片的传输。

Base64,并非安全领域下的加密解密算法。虽然经常遇到所谓的base64的加密解密。但base64只能算是一个编码算法,对数

据内容进行编码来适合传输。虽然base64编码过后原文也变成不能看到的字符格式,但是方式初级又简单。

特点:

  

Base64编码

Base64的原理超级简单,相信我们都知道ASCII 编码,从A-Z、a-z、0-9和一些其他的特殊字符,这些字符都有唯一的一个数字来表示。比如说a是97,A是65。

同理Base64也有这样一套编码。范围是”A-Z“、”a-z“、”0-9“、”+“、”/“一共64个字符。我们给出一个表格来看一下,这个比ASCII编码要简单多了,只有64个。

 

Base64只是进行了编码,方便数据的传输而已。不是加密。

编码后长度是原来的4/3 增加了1/3

 

 

基本原理:

比如说有一封邮件,我们想要对其使用Base64进行编码。怎么办呢?基本步骤如下:

(1)对邮件的数据进行切分,每三个字节一组,一共24个bit。     3btye * 8 = 24 bit

(2)对切分后的数据重组,24个bit重组为4组,每组6个bit。        24bit = 4*6bit

(3)对重组后的数据处理,每组最前面添加两个“0”,构成每组8个bit。此时一共32个bit。  “00”+6bit = 8bit       *   4 =  32 bit = 4 byte

(4)根据Base64编码表,获取相应的编码值。

此时一封完整的邮件,被切分重组处理之后就变成了Base64编码了。基本原理其实很简单。不过你不理解也没关系,我们直接上个实例来解释一下。

 

比如说电子邮件里面出现了三个字母sky。我们要对这个三个字符使用Base64进行编码。

(1)对邮件的数据进行切分,每三个字节一组,一共24个bit

 

 

 

 

(2)对切分后的数据重组,24个bit重组为4组,每组6个bit

 

 

 

(3)对重组后的数据处理,每组最前面添加两个“0”,构成每组8个bit。由于在最前面添加的0,所以对数值不构成影响。

 

 

(4)根据Base64编码表,获取相应的编码值

 

 

 

 

(5)完成编码的转换

到这我们基本上就是实现了Base64编码机制从sky到c2t5的转换。

有些地方需要我们去注意一下:

(1)在第三步中,最前面添加了两个0,所以最终编码之后要比之前多出三分之一的大小。

(2)上面的例子中,我们使用的是ASCII编码,但是如果我们使用UTF-8,对应Base64编码的结果是不一样的。

(3)Base64只是进行了编码,方便数据的传输而已。这可不是加密。

 

 

代码实现

       String str ="sky";
        BASE64Encoder encoder = new BASE64Encoder();
        String res = encoder.encode(str.getBytes());
        System.out.println("编码后"+res);

        BASE64Decoder decoder = new BASE64Decoder();
        byte[] res2 = new byte[0];
        try {
            res2 = decoder.decodeBuffer(res);
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("解码后"+new String(res2));
    }

 

posted @ 2020-04-28 10:45  D·Felix  阅读(558)  评论(0编辑  收藏  举报