一、Base64简介
Java8开始,在java.util包下新增了一种Base64的编码方案,该编码方案相关的概念解释如下:
-
Base64:是一种Java类库中的编码方案,也是一个编码工具类,用于实现字节数据的编码和解码;
-
Base64.Encoder:用于编码字节数据的编码器,线程安全;
-
Base64.Decoder:用于解码字节数据的解码器,线程安全;
-
Base64支持的编解码类型有:基本类型、URL类型、MIME类型;
-
基本类型(Basic):对“Base64字母表”进行编解码操作(合法输出有:A到Z、a到z、0到9、+/),编码器不添加任何换行符(行分隔符)字符,解码器拒绝包含base64字母外的字符的数据;
-
URL类型(URL and Filename safe):对“URL和Filename safe Base64 Alphabet”进行编解码操作(合法输出有:A到Z、a到z、0到9、+_),编码器不添加任何换行符(行分隔符)字符,解码器拒绝包含base64字母外的字符的数据;
-
MIME类型(MIME):对“Base64字母表”进行编解码操作,编码输出必须以不超过76个字符的行
'\n'
,并使用回车'\r'
然后立即以换行'\n'
作为行分隔符。 没有行分隔符添加到编码输出的末尾。 在解码操作中,将忽略base64字母表中未找到的所有行分隔符或其他字符。
二、Base64实战
熟悉了Base64编码方案相关的概念,结合api文档,实操一下:
import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;
/**
* Java8新增了Base64编码方案的编码器Encoder和解码器Decoder
* 编解码类型有:基本编码、URL编码、MIME编码, Demo测试
*
* @createTime 2020/10/13 18:34
* @author weixiangxiang
*/
public class XxxTest extends BaseController {
public static void main(String[] args) throws UnsupportedEncodingException {
String context = "你好,weixiangxiang!";
// 基本编码
String baseEncode = Base64.getEncoder().encodeToString(context.getBytes("utf-8"));
logger.info("基本Base64编码字符串:" + baseEncode); //5L2g5aW977yMd2VpeGlhbmd4aWFuZ++8gQ==
// 解码
String baseDecoder = new String(Base64.getDecoder().decode(baseEncode), "utf-8");
logger.info("基本Base64解码:" + baseDecoder); //你好,weixiangxiang!
// URL编码
String urlEncode = Base64.getUrlEncoder().encodeToString(context.getBytes(StandardCharsets.UTF_8));
logger.info("URLBase64编码字符串:" + urlEncode); //5L2g5aW977yMd2VpeGlhbmd4aWFuZ--8gQ==
String urlDecoder = new String(Base64.getUrlDecoder().decode(urlEncode), StandardCharsets.UTF_8);
logger.info("URLBase64解码:" + urlDecoder); //你好,weixiangxiang!
// Mime编码
String mimeEncode = Base64.getMimeEncoder().encodeToString(context.getBytes(StandardCharsets.UTF_8));
logger.info("MimeBase64编码字符串:" + mimeEncode); //5L2g5aW977yMd2VpeGlhbmd4aWFuZ++8gQ==
String mimeDecoder = new String(Base64.getMimeDecoder().decode(mimeEncode), StandardCharsets.UTF_8);
logger.info("MimeBase64解码:" + mimeDecoder); //你好,weixiangxiang!
}
}
小结一下:
Base64编码方案可作为一种加密方式使用,而实际项目中使用更多的则是MD5方式进行加密。作为加密工具类无论是MD5、Base64、BCrypt还是SHA,了解编码和解码规则并能封装成工具类使用即可,不积硅步无以至千里,点滴付出终将有所收获,共同进步 ~