2-2 JDK8之新增Base64加解密方式
前言
- 传统Base64 加密解密在性能方面损耗比较大,从而大程度上限制着其作用范围。
- JDK8新推出的Base64加解密方式对于传统方式在性能上做出了优化。
是什么?
- Base64就是一种基于64个可打印字符来表示二进制数据的方法。
- Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法基于64个字符A-Z,a-z,0-9,+,/的编码方式,是一种能将任意二进制数据用64种字元组合成字符串的方法,而这个二进制数据和字符串资料之间是可以互相转换的,在实际应用上,Base64除了能将二进制数据可视化之外,也常用来表示字串加密过后的内容。
有什么用?
- 偶尔需要用这条纯文本通道传一张图片之类的情况发生的时候,就会用到base64。#下方有示例
- 前端向服务器传递重要数据时可以通过base64加密。
示例
1)、传统方式加解密
- 代码
public class Main {
public static void main(String[] args) throws IOException {
BASE64Encoder base64Encoder = new BASE64Encoder();
BASE64Decoder base64Decoder = new BASE64Decoder();
String str = "测试编码-小滴课堂 https://xdclass.net";
byte[] bytes = str.getBytes("UTF-8");
String encodeText = base64Encoder.encode(bytes);
System.out.println(encodeText);
String decodeText = new String(base64Decoder.decodeBuffer(encodeText));
System.out.println(decodeText);
}
}
测试结果
2)、JDK8 新加解密方式
- 代码
public class Main {
// 传统加密解密方式
public static void main(String[] args) throws IOException {
Base64.Encoder base64Encoder = Base64.getEncoder();
Base64.Decoder base64Decoder = Base64.getDecoder();
String str = "测试编码-小滴课堂 https://xdclass.net";
byte[] bytes = str.getBytes("UTF-8");
String encodeText = base64Encoder.encodeToString(bytes);//进行加密
System.out.println(encodeText);
String decodeText = new String(base64Decoder.decode(encodeText));//进行解密
System.out.println(decodeText);
}
}
- 测试结果
3)、百度 HTML内嵌Base64编码图片
拓展
1)、传统方式和JDK8新方式在性能上有多大差异?
-
测试方式:
让二者分别对相同内容加密 十万次#由于需加密数据过小次数增大 来统计所需时间。- 代码测试
- 传统方式代码
- 代码测试
public class Main {
// 传统加密解密方式
public static void main(String[] args) throws IOException {
long startTime = System.currentTimeMillis();
for (int i=0;i<100000;i++){
BASE64Encoder base64Encoder = new BASE64Encoder();
BASE64Decoder base64Decoder = new BASE64Decoder();
String str = "测试编码-小滴课堂 https://xdclass.net";
byte[] bytes = str.getBytes("UTF-8");
String encodeText = base64Encoder.encode(bytes);// 进行加密
String decodeText = new String(base64Decoder.decodeBuffer(encodeText));// 进行解密
}
long endTime = System.currentTimeMillis();
System.out.println(endTime-startTime);
}
}
-
传统方式测试结果
-
JDK8新方式代码
public class Main {
// JDK8加密解密方式
public static void main(String[] args) throws IOException {
long startTime = System.currentTimeMillis();
for (int i=0;i<100000;i++){
Base64.Encoder base64Encoder = Base64.getEncoder();
Base64.Decoder base64Decoder = Base64.getDecoder();
String str = "测试编码-小滴课堂 https://xdclass.net";
byte[] bytes = str.getBytes("UTF-8");
String encodeText = base64Encoder.encodeToString(bytes);//进行加密
String decodeText = new String(base64Decoder.decode(encodeText));//进行解密
}
long endTime = System.currentTimeMillis();
System.out.println(endTime-startTime);
}
}
-
JDK8新方式测试结果
- 二者对比结论
传统方式需要时间829毫秒,JDK8新方式需要111毫秒。JDK8新方式在时间上只需传统方式的七分之一。
- 二者对比结论
未经授权不得转载或转载请注明出处