Base64算法介绍
Base64就是用64个英文字符来表示二进制数据的一种编码方式。64个英文字符分别是A-Z、a-z、0-9、/+。
64个字符展示
编号 | 字符 | 编号 | 字符 |
---|---|---|---|
0 | A | 32 | g |
1 | B | 33 | h |
2 | C | 34 | i |
3 | D | 35 | j |
4 | E | 36 | k |
5 | F | 37 | l |
6 | G | 38 | m |
7 | H | 39 | n |
8 | I | 40 | o |
9 | J | 41 | p |
10 | K | 42 | q |
11 | L | 43 | r |
12 | M | 44 | s |
13 | N | 45 | t |
14 | O | 46 | u |
15 | P | 47 | v |
16 | Q | 48 | w |
17 | R | 49 | x |
18 | S | 50 | y |
19 | T | 51 | z |
20 | U | 52 | 0 |
21 | V | 53 | 1 |
22 | W | 54 | 2 |
23 | X | 55 | 3 |
24 | Y | 56 | 4 |
25 | Z | 57 | 5 |
26 | a | 58 | 6 |
27 | b | 59 | 7 |
28 | c | 60 | 8 |
29 | d | 61 | 9 |
30 | e | 62 | + |
31 | f | 63 | / |
基本思想
将原数据每3个字节(24bit)分为一组,然后将这24bit数据按照每6bit一组,重新划分为4组,分组完成之后,再将每每6bit数据为单元进行映射。
编码流程
- 将给定的数据转换成二进制编码,转换成二进制编码的方式。
- 对给定的编码做分组转换操作,每3个字节(24bit)分为一组,然后将这24bit划分为4组6bit。
- 对获得的4组6bit编码进行补位,向6bit编码的高位补2bit 0,变成4组8bit编码。
- 将每个8bit编码转换为十进制编码。
- 以十进制编码为索引,映射为上表中对应的字符。
当原文字节长度是3的整数倍
比如,将字符串ABC转换成Base64编码:
1.将ABC分别转换成二进制数据如下
2.将图中的二进制数据以6bit分为四组
3.将四组6bit进行高位补0,补成8bit
4.将补完后的8bit二进制转换成十进制
5.按照十进制编号找到对应的字符
当原文字节长度不是3的整数倍
比如,将字符串ABCD转换成Base64编码:
1.将ABCD分别转换成二进制数据如下
2.由于ABCD总共有32bit,需要补全称24的倍数,补全16bit,补全后,将图中的二进制数据以6bit分为四组
3.将四组6bit进行高位补0,补成8bit
4.将补完后的8bit二进制转换成十进制
5.按照十进制编号找到对应的字符
6.由于后边16位0都是填充的,因此不能映射成字符A,Base64中规定,填充的0字节用=来进行补全
注意:
原文的数据长度除以3余数为0时,编码之后后面没有"=";当余数为1时,后面有两个"=",当余数是2时,后面有一个"=","="的个数也就是补充的字节数。