1 Base 64编码
Base 64 编码采用了US-ASCII 的65个字符集,每个字符都由6位来表示(0- 2 6-1),而第65位字符“=”用来表示字符串的结束。
Value | Encoding |
| Value | Encoding |
| Value | Encoding |
| Value | Encoding |
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 | 64(pad) | = | |||
14 | O | 31 | f | 48 | w |
|
| |||
15 | P | 32 | g | 49 | x |
|
| |||
16 | Q | 33 | h | 50 | y |
|
| |||
|
|
|
|
|
|
|
|
编码原理
输入串以24bits(3字节) 为一位组,输出为4个编码后的字符,编码过程从左到右。24位的输入组实际上是3个八位的单字节构成,编码时24位被视为4个6位(0-63)的组合,每个6位再按照base64字母表编码为一个字符。(编码时位的顺序?)
输出行每行不应多于76个字符,编码表中没有的字符将被忽略。
当输入位数小于24位时,右边补0直到位数构成6位的倍数。
换行符必须转换成由base64编码过的CRLF字符序列。
如果遇到“=”,则可说明已到达字符串结尾。
数据的结尾用“=”填充,下列为“=”使用的情况:
1) 当输入位数为24位的整数倍的时候,编码后的输出单元为4的整倍数,此时输出结尾没有“=”。
2) 若输入流的最后单位是8位时,末尾将会有两个“=”。
3) 若输入流的最后单位是16位,末尾将会有一个“=”。
程序流程:
1) 编码:输入-原文。
逐个扫描输入字节,每六位转换成base64字符,直到结束。注意换行,以及结尾“=”符号处理。
2) 解码:输入-译文base64代码
判断是否为合法字符,逐个输入译文符号,没3字节(24bits)进行一次处理。注意结尾“=”的处理。