Base64 原理,老是忘记,写篇文章,加深记忆,同时 说下 URLEncode和 Jwt的Base64Url编码

1.首先线上码表:

Base64 原理,老是忘记,写篇文章,加深记忆,同时 说下 URLEncode和 Jwt的Base64Url编码

Base64 原理,老是忘记,写篇文章,加深记忆,同时 说下 URLEncode和 Jwt的Base64Url编码

===============================================================

用例子来说明 Base64

public class TestMain {
    public static void main(String[] args) throws UnsupportedEncodingException {
        String a = Base64.getEncoder().encodeToString("a".getBytes("UTF-8"));
        String ab = Base64.getEncoder().encodeToString("ab".getBytes("UTF-8"));
        String abc = Base64.getEncoder().encodeToString("abc".getBytes("UTF-8"));

        System.out.println(a);
        System.out.println(ab);
        System.out.println(abc);
    }
}

Base64 原理,老是忘记,写篇文章,加深记忆,同时 说下 URLEncode和 Jwt的Base64Url编码

 

我们来分析 以上 这个例子:

首先看下ascii表,字母 --- 二进制(4位排列)---- 二进制(6位一组排列):

a ---> 0100  0001 --->  010000  01(按6位一组排列,缺少4位)

ab ---> 0100  0001 0100 0010  --->  010000  010100  0010(按6位一组排列,缺少2位)

abc ---> 0100  0001 0100 0010  0100  0011  --->  010000  010100  001001  000011(按6位一组排列,正好,因为 4*6 = 3* 8 = 24)

 

有了以上二进制,下面再继续说,说明一点 a 若按6位一组排列是不够的,缺少低4位,严重注意一点 a 的 010000  01(这个01是要看成高位),这个时候 他们规定了一个规则,就是你需要把最后的二进制01看成6位一组的高位

后面缺少的4位,根据规定,你需要当成全部是0,注意点是设定为0,可不是网上说的什么填充为0,这个和填充没有任何关系,和传输也没有任何关系,一切都是规定 ,只是一种规定的算法,然后可以根据规则再逆转回来

与传输数据没有任何关系,哎呀 这里说不清了,算了,只需要知道 规则算法就行了。

然后就可以计算出对应的值:

a ---- 010000  01 ---  2的4次方 + 2的4次方(01是高位切记) ---

 

Base64 原理,老是忘记,写篇文章,加深记忆,同时 说下 URLEncode和 Jwt的Base64Url编码

上一篇:Linux配置MariaDB


下一篇:HTML 表格