编码技术
一、编码
1、base64 编码
base64编码是将文本重新编码,转化成指定 64个可见ASCII字符的形式,这64个字符包括 A~Z, a~z, 0~9, + 和 /
其原理是将原文本按每3个字节取出来,每 6bit 依次拆开,首部补上2bit的0值,这样原本3字节的数据就变成了新的4字节。
从原理可知,base64编码之后,最终文本会比原文本增加33.3%。
需要注意的是,如果原文本取到最后,不足3字节,则不足6bit部分,除首部补上2bit的0值之外,尾部也补上0值,凑足8bit。
那新拼成的4字节是按标准的ASCII码显示吗?不是,是按一份约定好的索引表,该表如下:
数值 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
字符 | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | a | b | c | d | e | f |
数值 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 |
字符 | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | y | z | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | + | / |
需要注意的是,如果不足3字节,缺少几个字节就在最终编码后面补上几个=号,即最多可以补两个=号。
比如对 go 进行 base64 ,首先就能猜到最终编码末尾会补上一个 = 号,然后我们看一下原文的ASCII码, g 是 103 即 01100111, o 是 111 即 01101111,放到一起是 0110011101101111,按每 6bit 分割为 011001 | 110110 | 1111 ,补好首部和尾部是 00011001 | 00110110 | 00111100 ,转成十进制为 25 | 54 | 60 ,查表得出 Z | 2 | 8,即 Z28,再补上一个=号,最终结果是 Z28=
base64可以将不可见字符转成可见字符传输,在 STMP 协议和其它文本协议中比较常用。此外在HTTP协议中,有时也会进行base64或url编码,来转换掉一些特殊字符。
2、url编码
3、16进制编码(二进制编码、64进制编码[base64])
4、ASCII码