2-2 JDK8之新增Base64加解密方式

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新方式在时间上只需传统方式的七分之一。

未经授权不得转载或转载请注明出处

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值