Base64是网络上一种常用的编码技术,常用于数据传输,但不是加密技术。
Base64其核心在于使用6个位的Base64字符来表示8个位的ASCII码,也就是每4个Base64字符表示3个ASCII字符。
Base64的每个字符只有6个位,因此最多可以表示$2^6=64$个字符.
有一张对应表。
字符 | 值 | 字符 | 值 | 字符 | 值 | 字符 | 值 | 字符 | 值 | 字符 | 值 | 字符 | 值 | 字符 | 值 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
A | 0 | B | 1 | C | 2 | D | 3 | E | 4 | F | 5 | G | 6 | H | 7 |
I | 8 | J | 9 | K | 10 | L | 11 | M | 12 | N | 13 | O | 14 | P | 15 |
Q | 16 | R | 17 | S | 18 | T | 19 | U | 20 | V | 21 | W | 22 | X | 23 |
Y | 24 | Z | 25 | a | 26 | b | 27 | c | 28 | d | 29 | e | 30 | f | 31 |
g | 32 | h | 33 | i | 34 | j | 35 | k | 36 | l | 37 | m | 38 | n | 39 |
o | 40 | p | 41 | q | 42 | r | 43 | s | 44 | t | 45 | u | 46 | v | 47 |
w | 48 | x | 49 | y | 50 | z | 51 | 0 | 52 | 1 | 53 | 2 | 54 | 3 | 55 |
4 | 56 | 5 | 57 | 6 | 58 | 7 | 59 | 8 | 60 | 9 | 61 | + | 62 | / | 63 |
将ASCII转换成Base64的流程是这样的
e.g. 将ASCII的字符串”ABC”转成Base64
A | B | C |
---|---|---|
01000001 | 01000010 | 01000011 |
每六位转成Base64的编码,去查表
010000 | 010100 | 001001 | 000011 |
---|---|---|---|
Q | U | J | D |
Base64编码后的字符串”ABC”即”QUJD”
可以看出,每三个ASCII字符转成四个Base64字符,如果不满3个的情况下,是这样的
e.g.将ASCII的字符串”AB”转成Base64
A | B |
---|---|
01000001 | 01000010 |
010000 | 010100 | 001000 |
---|---|---|
Q | U | I |
注意到AB两个ASCII码只有16位,三个Base64编码18位,因此最后两位补0
不满四个字符,在后面补充”=”
Base64编码后的字符串”ABC”即”QUI=”
另附Java实现Base64的编码与解码
编码:
1 | public class Base64Encoder { |
解码:
1 | public class Base64Decoder { |