Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。
Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息。
采用Base64编码具有不可读性,需要解码后才能阅读。
Base64由于以上优点被广泛应用于计算机的各个领域。
本文讲解如何使用Java语言实现Base64的加密和解密。(基于 JDK 1.8 的新增功能 Base64 特性)
初始版本代码如下:
import java.io.UnsupportedEncodingException; import java.util.Base64; /** * @author Miracle Luna * @version 1.0 * @date 2019/7/3 18:55 */ public class Base64Converter { final static Base64.Encoder encoder = Base64.getEncoder(); final static Base64.Decoder decoder = Base64.getDecoder(); /** * 给字符串加密 * @param text * @return */ public static String encode(String text) { byte[] textByte = new byte[0]; try { textByte = text.getBytes("UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } String encodedText = encoder.encodeToString(textByte); return encodedText; } /** * 将加密后的字符串进行解密 * @param encodedText * @return */ public static String decode(String encodedText) { String text = null; try { text = new String(decoder.decode(encodedText), "UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return text; } public static void main(String[] args) throws UnsupportedEncodingException { String username = "Miracle Luna"; String password = "p@sSW0rd"; // 加密 System.out.println("==== [加密后] 用户名/密码 ====="); System.out.println(Base64Converter.encode(username)); System.out.println(Base64Converter.encode(password)); // 解密 System.out.println("\n==== [解密后] 用户名/密码 ====="); System.out.println(Base64Converter.decode(Base64Converter.encode(username))); System.out.println(Base64Converter.decode(Base64Converter.encode(password))); } }
运行结果如下:
==== [加密后] 用户名/密码 ===== TWlyYWNsZSBMdW5h cEBzU1cwcmQ= ==== [解密后] 用户名/密码 ===== Miracle Luna p@sSW0rd
改进版本(推荐)代码如下:
import java.nio.charset.StandardCharsets; import java.util.Base64; /** * @author Miracle Luna * @version 1.0 * @date 2019/7/3 18:55 */ public class Base64Util { final static Base64.Encoder encoder = Base64.getEncoder(); final static Base64.Decoder decoder = Base64.getDecoder(); /** * 给字符串加密 * @param text * @return */ public static String encode(String text) { // byte[] textByte = text.getBytes(StandardCharsets.UTF_8); // String encodedText = encoder.encodeToString(textByte); // return encodedText; return encoder.encodeToString(text.getBytes(StandardCharsets.UTF_8)); } /** * 将加密后的字符串进行解密 * @param encodedText * @return */ public static String decode(String encodedText) { return new String(decoder.decode(encodedText), StandardCharsets.UTF_8); } public static void main(String[] args) { String username = "Miracle Luna"; String password = "p@sSW0rd"; // 加密 System.out.println("==== [加密后] 用户名/密码 ====="); System.out.println(Base64Util.encode(username)); System.out.println(Base64Util.encode(password)); // 解密 System.out.println("\n==== [解密后] 用户名/密码 ====="); System.out.println(Base64Util.decode(Base64Util.encode(username))); System.out.println(Base64Util.decode(Base64Util.encode(password))); } }
运行结果如下: