base64的定义
base64是一种用64个字符来表示任意二进制数据的方法。
为什么使用base64?
我们打开图片文件或视频文件的时候经常会看到乱码或空白的内容。这是为什么呢?计算机中的任何数据都是asc码编码的,而asc码的128~255位不可见字符,这样在表示数据的时候就会让我们看到乱码或者空白的内容了。如果把所有的数据都转换成可见字符就可以了,base64就是把数据都转换成A~Z,a~z,0~9, +, /这64个字符的方法,通过base64我们就可以看到所有的数据了。
base64的转换方法
对于任意的2进制数据,我们划分为3个字节一组。一个字节为8位,3个字节就是24位数据。对于base64的64个字符,如果用字节来表是的话,用6位的2进制数据就可以表示完。由此,3个字节的24位数据,可以切割成4个6位的二进制数据。计算机每一位字节都必须是8位,我们可以再前面补0,来补充成8位的而进制数据。
例如:
adm的asc码为:0x61, 0x64, 0x6d
二进制的表示为:0110 0001 0110 0100 0110 1101
转换成4个字节6位的数据就是: 011000 010110 010001 101101
前面补0就是: 0001 1000, 0001 0110, 0001 0001, 0010 1101
表示成10进制数据就是: 24, 22, 17, 45
把base64所表示的字符做成一张表,A~0 B~1 C~2 …. +~62 /~63
通过查表可以知道:24~Y 22~W 17~R 45~t
如果二进制数据的长度不是3的倍数的情况下,怎么办?在转换后的转换后的数据后面添加1或2个=来表示添加了几个字符。对于二进制数据的转换过程中长度不是6的倍数的就在后面添加0x00补齐。
例如:
admin的asc码为:0x61, 0x64, 0x6d, 0x69, 0x6E
二进制表示为: 0110 0001 ,0110 0100 ,0110 1101 ,0110 1001, 0110 1110
转成6位长的数据(最有一个长度只有4个在后面补0): 011000, 010110, 010001, 101101, 011010, 010110, 111000
前面补0就是:0001 1000, 0001 0110, 0001 0001, 0010 1101, 0001 1010, 0001 0110, 0011 1000
表示成10进制就是:24, 22, 17, 45, 36, 22, 56
查表可得数据: YWRtkW4
添加上一个=的到结果: YWRtkW4=
- 在URL获得cookie中得到的=容易产生歧义,因此可以去掉=得到base64的数据。由于base64转换都是3个字节数据得到4个数据,最后的base64的数据一定是4的倍数。解码的时候,如果数据不是4的倍数可以再后面添加=后再解码。
- 在URL中如果的到base64数据中含有+或/,容易造成歧义。有URL safe base64将+和/转换成-和_。
base64表
索引 | 对应的字符 | 索引 | 对应的字符 | 索引 | 对应的字符 | 索引 | 对应的字符 |
---|---|---|---|---|---|---|---|
0 | A | 16 | Q | 32 | g | 48 | w |
1 | B | 17 | R | 33 | h | 49 | x |
2 | C | 18 | S | 34 | i | 50 | y |
3 | D | 19 | T | 35 | j | 51 | z |
4 | E | 20 | U | 36 | k | 52 | 0 |
5 | F | 21 | V | 37 | l | 53 | 1 |
6 | G | 22 | W | 38 | m | 54 | 2 |
7 | H | 23 | X | 39 | n | 55 | 3 |
8 | I | 24 | Y | 40 | o | 56 | 4 |
9 | J | 25 | Z | 41 | p | 57 | 5 |
10 | K | 26 | a | 42 | q | 58 | 6 |
11 | L | 27 | b | 43 | r | 59 | 7 |
12 | M | 28 | c | 44 | s | 60 | 8 |
13 | N | 29 | d | 45 | t | 61 | 9 |
14 | O | 30 | e | 46 | u | 62 | + |
15 | P | 31 | f | 47 | v | 63 | / |
应用场景
1,应用在URL,cookie或网络中传输少量的二进制数据的时候。
2, 电子邮件,或者网络证书等。
3,网络中传输的图片数据。