Base64理解
Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。
采用a-z、A-Z、0-9、“+”、“/” 再加一个=做为补充符号,总共65个可显示字符。
特点:
从原来的24位变成32位 ,Base64转换后的字符长度比原来大三分之一左右
转换规则
1、每3个字节分为一组,总共24个二进制位
2、将这24个二进制位分成四份,每份6个二进制位
3、在每份前面加上两个00,变成32个二进制位,即4个字节
将这四个字节的每一个字节转换成十进制,转换后的十进制即对应Base64 码表中的下标。
Base64码表
0 | A |
| 26 | a |
| 52 | 0 |
1 | B | 27 | b | 53 | 1 | ||
2 | C | 28 | c | 54 | 2 | ||
3 | D | 29 | d | 55 | 3 | ||
4 | E | 30 | e | 56 | 4 | ||
5 | F | 31 | f | 57 | 5 | ||
6 | G | 32 | g | 58 | 6 | ||
7 | H | 33 | h | 59 | 7 | ||
8 | I | 34 | i | 60 | 8 | ||
9 | J | 35 | j | 61 | 9 | ||
10 | K | 36 | k | 62 | + | ||
11 | L | 37 | l | 63 | / | ||
12 | M | 38 | m |
|
| ||
13 | N | 39 | n |
|
| ||
14 | O | 40 | o |
|
| ||
15 | P | 41 | p |
|
| ||
16 | Q | 42 | q |
|
| ||
17 | R | 43 | r |
|
| ||
18 | S | 44 | s |
|
| ||
19 | T | 45 | t |
|
| ||
20 | U | 46 | u |
|
| ||
21 | V | 47 | v |
|
| ||
22 | W | 48 | w |
|
| ||
23 | X | 49 | x |
|
| ||
24 | Y | 50 | y |
|
| ||
25 | Z | 51 | z |
|
举例
例如:
Wangbl
W 对应的ASCII值十进制为87,二进制为:0101 0111
a 对应的ASCII值十进制为97,二进制为:0110 0001
n 对应的ASCII值十进制为110,二进制为:0110 1110
g 对应的ASCII值十进制为103,二进制为:0110 0111
b 对应的ASCII值十进制为98,二进制为: 0110 0010
l 对应的ASCII值十进制为1083,二进制为:0110 1100
将Wangbl 每三个字节分成一组,总共分成两组
一、先对第一组Wan进行转换
1、将01010111、01100001、01101110这24位每6位分成一组,总共被分为4组
2、分成4组后的二进制为010101、110110、000101、101110
3、然后在4组的二进制前面加两个0后变为00010101、00110110、00000101、00101110
4、转换成十进制为21、54、5、46,对应上面的Base64码表得到V2Fu
二、将第二组gbl进行转换
1、将0110 0111、0110 0010、0110 1100这24位每6位分成一组,总共被分为4组
2、分成4组后的二进制为011001、110110、001001、101100
3、然后在这4组的二进制前面补两个0,结果为00011001、00110110、00001001、00101100
4、转换成十进制为25、54、9、44,对应上面的Base64码表得到Z2Js
最终Wangbl用Base64加密之后的字符为V2FuZ2Js
如果在分成的组不满3个字节的情况。分为两种情况:一种是分组后其中一组只有两个字节;另外一种情况是分组后其中一组只有一个字节。下面分别举例说明
例如Wangb,每3个字节分成一组之后,得到的两组为Wan,gb,其中第二组gb只有两个字节
一、先对第一组Wan进行转换
1、将01010111、01100001、01101110这24位每6位分成一组,总共被分为4组
2、分成4组后的二进制为010101、110110、000101、101110
3、然后在4组的二进制前面加两个0后变为00010101、00110110、00000101、00101110
4、转换成十进制为21、54、5、46,对应上面的Base64码表得到V2Fu
二、对第二组gb进行转换
1、将0110 0111、0110 0010这16位每6位分成一组,总共分成3组
2、分成3组后的二进制为011001、110110、0010,最后一组前面补两个0,后面也要补两个0
3、补0后得到的24位二进制为00011001、00110110、00001000
4、将这24位二进制转换成十进制结果为25、54、8,对应上面的Base64码表得到Z2I
5、最后一位补上一个”=“,得到的字符为Z2I=
Wangb最终用Base64加密后的字符为V2FuZ2I=
例如Wang,每3个字节分成一组之后,得到的两组为Wan,g,其中第二组g只有一个字节
一、先对第一组Wan进行转换
1、将01010111、01100001、01101110这24位每6位分成一组,总共被分为4组
2、分成4组后的二进制为010101、110110、000101、101110
3、然后在4组的二进制前面加两个0后变为00010101、00110110、00000101、00101110
4、转换成十进制为21、54、5、46,对应上面的Base64码表得到V2Fu
二、对第二组g进行转换
由于g只有一个字节,按照规则每6位分成一组,总共得到两组,在末尾补上两个”=“号
1、将0110 0111这8位每6位分成一组,总共被分为两组
2、分成2组后的二进制为011001、11
3、每组前面补两个0,最后一组后面补四个0,得到的结果为00011001、00110000
4、将步骤3中得到的结果转换成十进制结果为:25、48,对应上面的Base64码表为Zw
5、在末尾补上两个”=“,结果为Zw==
最终Wang通过Base64加密之后结果为V2FuZw==
由于知识涉及的比较繁琐,需要自己手动多转换几次,方便理解。