Base64 是个啥?
1、什么是Base64
Base64是网络上最常见的用于传输8Bit字节码的编码方式之一
Base64就是一种基于64个可打印字符来表示二进制数据的方法
Base64是一种编码算法。为什么叫Base64 ?因为这种算法只支持64个【可打印字符】
ASCII码对照表 :http://ascii.911cha.com
2、为什么使用Base64
base64 最早就是用来邮件传输协议中的,原因是邮件传输协议只支持 ascii 字符传递,因此如果要传输二进制文件,如:图片、视频是无法实现的。因此 base64 就可以用来将二进制文件内容编码为只包含 ascii 字符的内容,这样就可以传输了
Base64主要用于将不可打印的字符转换成可打印字符,或者简单的说将二进制数据编码成ASCII字符。
3、Base64 原理
编码:
转码前 :lmy 转码后:bG15
Base64 可以把原本ASCII码的控制字符甚至ASCII码之外的字符都转换成都可打印的 6bit 字符
在计算机中 1字节占8位 3*8=24 取最小公倍数 4*6=24 这就意味着我们可以用4个 Base64字符来表示3个传统的8bit的字符
lmy 对应的十进制分别是 108 109 121
二进制 :0110 1100 0110 1101 0111 1001
6个一组(4组)011011 000110 110101 111001
然而计算机是8位8位的存数 6不够,自动就补两个高位0了
00011011 00000110 00110101 00111001
转换成十进制分别是 27 6 53 57
参照Base64对照表分别得出 b G 1 5
Base64对照表
索引 | 对应字符 | 索引 | 对应字符 | 索引 | 对应字符 | 索引 | 对应字符 |
0 | A | 17 | R | 34 | i | 51 | z |
1 | B | 18 | S | 35 | j | 52 | 0 |
2 | C | 19 | T | 36 | k | 53 | 1 |
3 | D | 20 | U | 37 | l | 54 | 2 |
4 | E | 21 | V | 38 | m | 55 | 3 |
5 | F | 22 | W | 39 | n | 56 | 4 |
6 | G | 23 | X | 40 | o | 57 | 5 |
7 | H | 24 | Y | 41 | p | 58 | 6 |
8 | I | 25 | Z | 42 | q | 59 | 7 |
9 | J | 26 | a | 43 | r | 60 | 8 |
10 | K | 27 | b | 44 | s | 61 | 9 |
11 | L | 28 | c | 45 | t | 62 | + |
12 | M | 29 | d | 46 | u | 63 | / |
13 | N | 30 | e | 47 | v | ||
14 | O | 31 | f | 48 | w | ||
15 | P | 32 | g | 49 | x | ||
16 | Q | 33 | h | 50 | y |
相比 8bit 的字符编码,Base64编码会多占用三分之一的字节长度,以此为代价实现了更好的兼容性
问题:如果原来的8bit字符长度不是3的倍数,比如长度是4,多余的的1个字符怎么编码?
lmyz 最小公倍数是 48 6*8=48 8*6=46
lmyz 对应的十进制分别是 108 109 121 122
二进制 :0110 1100 0110 1101 0111 1001 0111 1010
6个一组(8组)011011 000110 110101 111001 011110 100000 000000 000000
不够的位用0来补
转换成十进制分别是 27 6 53 57 30 32 = = 提示:十进制匹配不到的用 【=】字符填充
参照Base64对照表分别得出 b G 1 5 e g = =
解码:
解码也是同样的道理 6bit * 8的字符串可以每 8bit 分成一组,共6组。每一组转换成一个8位的byte字节。
4、总结
Base64 只是一种编码算法,而非加密算法。任何人都可以将Base64的编码结果解码成唯一的原文
加密算法有很多,例如MD5、SHA、AES、RSA等等,在今后的文章中我会一一介绍
文章参考公众号 程序员小灰