Java 1.8+推荐使用java.util.Base64:标准编码用getEncoder()/getDecoder(),URL安全用getUrlEncoder()/getUrlDecoder(),MIME用getMimeEncoder()/getMimeDecoder();禁用sun.misc.BASE64Encoder,注意字符集与非法输入处理。

Java里用Base64编码解码很简单,JDK 1.8+自带java.util.Base64类,无需额外依赖,安全可靠,推荐直接使用。
标准Base64编解码(推荐)
这是最常用场景,比如传输二进制数据(图片、token等)转成文本安全格式。
- 编码:用
Base64.getEncoder().encodeToString(byte[]),返回String - 解码:用
Base64.getDecoder().decode(String),返回byte[] - 注意:输入字符串必须是合法Base64格式,否则抛
IllegalArgumentException
示例:
String original = "Hello Java";String encoded = Base64.getEncoder().encodeToString(original.getBytes(StandardCharsets.UTF_8)); // "SGVsbG8gSmF2YQ=="
byte[] decodedBytes = Base64.getDecoder().decode(encoded);
String decoded = new String(decodedBytes, StandardCharsets.UTF_8); // "Hello Java"
URL安全Base64(适合HTTP参数)
标准Base64含+、/和=,在URL或文件名中可能出问题。用getUrlEncoder()和getUrlDecoder()替代。
立即学习“Java免费学习笔记(深入)”;
- 编码结果用
-代替+,_代替/,不补= - 解码时自动兼容有无
=尾缀,也支持-/_
适合JWT载荷、URL参数、Cookie值等场景。
MIME Base64(处理邮件/附件)
如果要生成符合RFC 2045的Base64(每76字符换行,含CRLF),用getMimeEncoder();解码用getMimeDecoder()。
- 编码结果带换行,适合老式邮件协议
- 日常Web开发基本用不到,除非对接特定邮件系统
常见坑与建议
- 别用过时的
sun.misc.BASE64Encoder——非公开API,JDK 9+已移除,且无保障 - 编码前明确字符集,如
str.getBytes(UTF_8),避免平台默认编码差异 - 解码失败多数因字符串被截断、含非法字符或混入空格——可先
trim()再解码 - Base64只是编码,不是加密!敏感数据仍需AES等真正加密手段
基本上就这些。JDK原生Base64够用、稳定、线程安全,直接拿去用就行。










