base64 是一种编码的方式, 并不是安全领域的加密解密算法。
base64 的目的是把一些二进制符转成普通字符, 方便在网络上传输。
因为有些系统只能使用ASCII字符,有些二进制字符是控制字符,不能直接传送, 需要转换。
base64 作用将 非ASCII字符转换为ASCII字符。
怎么转换的,可以参考下面这篇。
base64 编码介绍
在Java 中, 使用base64进行编码和解码的方式常见的有三种:
- [推荐] 从Java 8 开始, base64 就成为Java类库的标准,位于java.util 的包下。对应类是base64。
- Java 7及之前的版本,JDK默认没有支持base64, 需要导入JRE 目录的lib 下的文件 rt.jar, 通过sun.misc.base64Encoder 和sun.misc.base64Decoder 进行加解密。(完整的路径%JAVA_HOME%jrelibrt.jar)。 在JDK8中依旧可以使用这个方法。
- Apache Commons Codec, 这是Apache 提供的常见编码器和解码器的实现,包括: base64、Hex、Phonetic 和 URL。
Java 8 中通过java.util.base64 提供的方法进行base 64的编码和解码。
- 这里以“123” 的编码为例, 编码后的字符串是 “MTIz”。
@Test
public void jdk8() {
// 编码
String encodedStr = java.util.base64.getEncoder().encodeToString("123".getBytes());
Assertions.assertEquals(encodedStr, "MTIz");
// 解码
byte[] decodeBytes = java.util.base64.getDecoder().decode("MTIz");
Assertions.assertEquals(new String(decodeBytes), "123");
}
Java 7使用rt.jar 中的相关类进行编码和解码
rt.jar 中用于处理的类是 sun.misc.base64Encoder 和sun.misc.base64Decoder 。通过创建这两个类的实例后,调用encode() 和 decodeBuffer() 方法。 示例代码如下:
@Test
public void jdk7() throws IOException {
String encodedStr = new sun.misc.base64Encoder().encode("123".getBytes());
Assertions.assertEquals(encodedStr, "MTIz");
byte[] decodeBytes = new sun.misc.base64Decoder().decodeBuffer("MTIz");
Assertions.assertEquals(new String(decodeBytes), "123");
}
Apache Commons Codec 实现base64 的编码和解码
Apache Commons Codec 的官方地址是:
https://commons.apache.org/proper/commons-codec/。
Apache Commons Codec 用来处理base64的类是 org.apache.commons.codec.binary.base64。
@Test
public void apacheCodec() {
String encodedStr = org.apache.commons.codec.binary.base64.encodebase64String("123".getBytes());
Assertions.assertEquals(encodedStr, "MTIz");
byte[] decodeBytes = org.apache.commons.codec.binary.base64.decodebase64("MTIz");
Assertions.assertEquals(new String(decodeBytes), "123");
}



