浅谈Base64

浅谈base64

☆base64介绍:

①base64不是加密算法,是可读性算法

②base64的目的不是保护我们的数据,目的是为了可读性(比如对一段信息进行加密后形成了乱码(因为编码表上找不到字符),可以通过base64来使其转化为我们可读的信息)

③base64是由64个字符组成:大写A-Z(26个),小写a-z(26个),数字0-9(10个),两个符号:+和/(2个)

☆base58和base64的区别

base58是一种一般用在比特币里面的编码方式,在base58里面,没有数字0,也没有字母o,没有大写字母I和小写字母i,也没有+和/(也就是一共由58个字符组成)。

☆base64原理

base64是3个字节为一组,一个字节是8位,一共就是24位

base64把三个字节转换成4组,每组6位(一个字节是8位,缺少2位,在高位进行补0,这样做的好处是:base64取后面6位,前面的2位会去掉,这样就可以控制在0-63之间,也就对应ASCII码表里面的A-Z,a-z,0-9,+,/)

具体的流程如下图所示:

☆base64补等号规则说明

这里存在一个问题,使用base64里面有个等号=,以下图为例(使用DES算法进行加密和解密):

但是base64中的64个字符对应的ASCII码表里面并没有等号=。这个地方需要注意,因为base64是三个字节一组,如果在输出的时候不够三个字节,会使用等号=来补齐,直到补到3个字节为止。

话不多说,上测试代码:

import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;

/**
 * 当字节不够的时候,需要使用=来补齐
 */
public class TestBase64 {
    public static void main(String[] args) {
        //1表示一个字节,不够3个字节
        //MQ==:需要注意,在使用base64进行编码的时候,如果字节不够3个字节,需要使用=来补齐,直到补齐至3个字节为止
        System.out.println(Base64.encode("1".getBytes()));
        //如果是2个字节,就补齐一个=
        System.out.println(Base64.encode("12".getBytes()));
        //三个字节,无需补齐
        System.out.println(Base64.encode("123".getBytes()));
        //“三金哥”:是9个字节,9*8=72,刚好被3整除,也无需补齐
        System.out.println(Base64.encode("三金哥".getBytes()));
    }
}

☆测试结果:

posted @ 2022-08-05 23:31  慕阳*  阅读(518)  评论(1编辑  收藏  举报