简介
Base64 is a binary-to-text encoding scheme that represents binary data in a printable ASCII string format by translating it into a radix-64 representation. Each Base64 digit represents exactly 6 bits of binary data.
(译文)Base64是一个二进制转换为文本的编码方案,它将二进制数转为radix-64编码数,从而能用ASCII字符串表示二进制数,每一个Base64数刚好能表示6为二进制数。
说明
Base64用来防止信息系统传输的数据被改变,例如在email中,可能不是8位清洁的(可能会是8位乱码)。比如在邮件中添加了图片附件,然后希望图片到达后不会出现乱码等情况。邮件程序可以用Base64编码图片附件,然后将其以相应的文本形式插入到邮件信息中。
Java8目前内置了Base64的编码器和译码器,通过静态方法可以获取到下方3种编译码器:
- 基本:输出被映射到一组字符A-Za-z0-9+/,编码不添加任何行标,输出的解码仅支持A-Za-z0-9+/;
- URL:输出被映射到一组字符A-Za-z0-9+_,输出是URL和文件;
- MIME(Multipurpose Internet Mail Extensions,多用途互联网邮件扩展类型):输出被映射到MIME的友好格式。输出每行不超过76字符,并且使用回车符’\r’加换行符’\n’作为分割。编码输出最后没有行分割符。
tip:回车符(carriage return, ‘\r’)使光标移到行首,换行符(line feed, ‘\n’)是使光标下移一行。
Base64编码和译码
Base64依靠一个简单的编码和译码算法。它使用一个含65个字符的US-ASCII字符集,其中前64个字符每个都按顺序映射为一个6位二进制数。下方为映射表:
| 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 | ||
| 14 | O | 31 | f | 48 | w | (pad) | = |
| 15 | P | 32 | g | 49 | x | ||
| 16 | Q | 33 | h | 50 | y |
Note: 第65个字符(=)用于填补空白,比如用1个或2个’=’将字符串填充到适当长度。
Base64实例
1 | import java.nio.charset.StandardCharsets; |
输出:
1 | Base64 编码字符串 (基本) :aHR0cDovL2xvY2FsaG9zdDo4MDgwL3NlYXJjaD9pZD0x |
更多详细内容参见官方文档