A:为何在进行Http传输的时候,须要把Byte数组进行Base64编码呢?算法
B:这很简单呀,由于Http协议是文本协议,不一样于二进制协议(如Thrift)那样直接进行二进制传输。数组
A:那么,直接把Byte数组转换成String不就好了吗?相似newString(bytes)这样。为何非要用Base64呢?编码
B:首先,Base64是一种编码算法。为何叫左Base64呢?由于这种算法只支持64个【可打印字符】加密
Value | Char | Value | Char | Value | Char | Value | Char |
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 | / |
A:为何只能支持64个字符呢,多了不是更好吗?可打印字符又是什么意思?spa
B:这就涉及到ASCII码的知识了。ASCII码的范围是0-127,其中0-31和127这33个字符属于控制字符(Controlcharacters)。剩下32-126这95个字符属于可打印字符(Printable characters),包含数字、大小写字母、经常使用符号。在这里我只列举其中的一部分:.net
B:早起的一些传输协议,例如传输邮件的SMTP协议,只能传输可打印的ASCII字符。致使本来8Bit的字节码(范围0-255)超过了可用的范围。好比当邮件传输图片资源的时候,某一个Byte值是10111011B,对应十进制187不属于ASCII码范围,所以没法被传输。这个时候,Base64编码应用而生了,它利用6bit字符表达了本来的8bit字符。Base64能够把本来ASCII码的控制字符甚至ASCII码以外的字符都转换成可打印的6big字符。blog
A:但是本来的字节码8bit,Base64怎么可以用6big来容纳8bit的内容呢?图片
B:既然单一字符的位数有限,咱们能够增长字符的数量。8和6的最小公倍数是24,这就意味着咱们能够用4个Base64字符来表示3个传统的8bit字符。ci
B:像表格中这样,8Bit X 3的字符串能够每6个bit分红一组,每一组bit对应一个十进制的index,每个index值又对应了Base64的字符。最终,8bit的字符串[Man]编码成了Base64的[TWFu]。相比8bit的字符编码,Base64编码会多占用三分之一的字节长度,以此为代价实现了更好的兼容性。资源
A:那么若是本来的8Bit字符串长度不是3的倍数,好比长度是13,多余的那一个字符怎么编码呢?
B:很好解决,多余的8bit中,前6bit作为一个Base64字符,剩下的2bit作为第二个Base64字符的前两位,后面的四位补0便可。至于第三第四个Base64字符,没有匹配的8bit字符,则使用[=]字符填充(Padding)。以下图把8bit的[M]编码成Base64的[TQ==]。
A:明白啦。那么一个通过Base64编码的字符串,如何进行解码呢?
B:解码也是一样道理,6bit X 4的字符串能够每8bit分红一组,共3组。每一组转换成一个8位的Byte字节。
A:OK,最后一个问题,Base64是否能够用来对重要信息作加密呢?
B:不行的。Base64只是一种编码算法,而非加密算法。任何人均可以将Base64的编码结果解码成惟一的原文。真正的加密算法有不少,包括MD5,SHA,ASE,RSA等等, --------------------- 做者:HelloWorld搬运工 来源:CSDN 原文:https://blog.csdn.net/wufaliang003/article/details/79573512 版权声明:本文为博主原创文章,转载请附上博文连接!