赞
踩
Java语言实现 Base64 加密 & 解密
Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。
Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息。
采用Base64编码具有不可读性,需要解码后才能阅读。
Base64由于以上优点被广泛应用于计算机的各个领域。
本文讲解如何使用Java语言实现Base64的加密和解密。(基于 JDK 1.8 的新增功能 Base64 特性)
初始版本
代码如下:
importjava.io.UnsupportedEncodingException;importjava.util.Base64;/***@authorMiracle Luna
*@version1.0
* @date 2019/7/3 18:55*/
public classBase64Converter {final static Base64.Encoder encoder =Base64.getEncoder();final static Base64.Decoder decoder =Base64.getDecoder();/*** 给字符串加密
*@paramtext
*@return
*/
public staticString encode(String text) {byte[] textByte = new byte[0];try{
textByte= text.getBytes("UTF-8");
}catch(UnsupportedEncodingException e) {
e.printStackTrace();
}
String encodedText=encoder.encodeToString(textByte);returnencodedText;
}/*** 将加密后的字符串进行解密
*@paramencodedText
*@return
*/
public staticString decode(String encodedText) {
String text= null;try{
text= new String(decoder.decode(encodedText), "UTF-8");
}catch(UnsupportedEncodingException e) {
e.printStackTrace();
}returntext;
}public static void main(String[] args) throwsUnsupportedEncodingException {
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
改进版本(推荐)
代码如下:
importjava.nio.charset.StandardCharsets;importjava.util.Base64;/***@authorMiracle Luna
*@version1.0
* @date 2019/7/3 18:55*/
public classBase64Util {final static Base64.Encoder encoder =Base64.getEncoder();final static Base64.Decoder decoder =Base64.getDecoder();/*** 给字符串加密
*@paramtext
*@return
*/
public staticString encode(String text) {//byte[] textByte = text.getBytes(StandardCharsets.UTF_8);//String encodedText = encoder.encodeToString(textByte);//return encodedText;
returnencoder.encodeToString(text.getBytes(StandardCharsets.UTF_8));
}/*** 将加密后的字符串进行解密
*@paramencodedText
*@return
*/
public staticString decode(String encodedText) {return newString(decoder.decode(encodedText), StandardCharsets.UTF_8);
}public static voidmain(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)));
}
}
运行结果如下:
==== [加密后] 用户名/密码 =====TWlyYWNsZSBMdW5h
cEBzU1cwcmQ=
==== [解密后] 用户名/密码 =====Miracle Luna
p@sSW0rd
PS:
改进版本使用了 StandardCharsets.UTF_8 代替了 "UTF-8"。
所以,没有抛出初始版本的 UnsupportedEncodingException异常。
StandardCharsets.java 源码如下:
/** Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
* ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
**/
packagejava.nio.charset;/*** Constant definitions for the standard {@linkCharset Charsets}. These
* charsets are guaranteed to be available on every implementation of the Java
* platform.
*
*@seeStandard Charsets
*@since1.7*/
public final classStandardCharsets {privateStandardCharsets() {throw new AssertionError("No java.nio.charset.StandardCharsets instances for you!");
}/*** Seven-bit ASCII, a.k.a. ISO646-US, a.k.a. the Basic Latin block of the
* Unicode character set*/
public static final Charset US_ASCII = Charset.forName("US-ASCII");/*** ISO Latin Alphabet No. 1, a.k.a. ISO-LATIN-1*/
public static final Charset ISO_8859_1 = Charset.forName("ISO-8859-1");/*** Eight-bit UCS Transformation Format*/
public static final Charset UTF_8 = Charset.forName("UTF-8");/*** Sixteen-bit UCS Transformation Format, big-endian byte order*/
public static final Charset UTF_16BE = Charset.forName("UTF-16BE");/*** Sixteen-bit UCS Transformation Format, little-endian byte order*/
public static final Charset UTF_16LE = Charset.forName("UTF-16LE");/*** Sixteen-bit UCS Transformation Format, byte order identified by an
* optional byte-order mark*/
public static final Charset UTF_16 = Charset.forName("UTF-16");
}
对 p@sSW0rd 进行加密,效果如下:
加密前:
加密后:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。