- A+
Base64 编码是什么?
Base64 是一种编码的方式, 并不是安全领域的加密解密算法。
Base64 的目的是把一些二进制符转成普通字符, 方便在网络上传输。
因为有些系统只能使用ASCII字符,有些二进制字符是控制字符,不能直接传送, 需要转换。
Base64 作用将 非ASCII字符转换为ASCII字符。
怎么转换的,可以参考下面这篇。
Base64 编码介绍
Java实现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%\jre\lib\rt.jar)。 在JDK8中依旧可以使用这个方法。
-
Apache Commons Codec, 这是Apache 提供的常见编码器和解码器的实现,包括: Base64、Hex、Phonetic 和 URL。
Java 8 内置Base 64 编码器、解码器
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"); }