Java Base64加密解密编码解码

起因

最近因为项目要做等保,需要对用户提交的字段进行加密存储,但是还需要做查询,所以需要能解密。

办法

目前打算采用rsa非对称加密保存数据,实现数据加密和解密,但是很尴尬的发现生成的公钥和秘钥居然是对象,且不能直接打印输出,网上看了一下,发现大多数的做法是把对象转化为二进制数据,然后使用base64进行编码

注:编码(为什么用编码,因为实际上base64不能称为强加密,很容易识别而且容易破解,但是编码后利于传输,不是明文传输,也算是一种手段吧,速度快,好用,是常见的使用方法)

但是我发现网上很多base64的方法居然用不了,我用的是jdk1.8,使用的包是import java.util.Base64;

那就来试试,如何快速使用编码解码吧。

首先是编码

Java Base64加密解密编码解码_第1张图片
方法很多,我们直接获取个基础的编码器,然后编码

Base64.Encoder encoder = Base64.getEncoder();
String hello="hello 中国!";
byte[] encode = encoder.encode(hello.getBytes());

编码不能直接传递字符串,需要转化为二进制数传递,返回的还是二进制文件,所以有什么用呢?我们打印一下
Java Base64加密解密编码解码_第2张图片
Java Base64加密解密编码解码_第3张图片
可以看出问题了吧,二进制文件已经不是原来的字符编码了

需要解码才能还原字符串,文件也是一样。

解码

解码比较简单,入参可以是二进制也可以是字符串,同样构造一个解码器

		Base64.Encoder encoder = Base64.getEncoder();
        String hello="hello 中国!";
        byte[] encode = encoder.encode(hello.getBytes());
        Base64.Decoder decoder = Base64.getDecoder();
        byte[] decode = decoder.decode(encode);
        byte[] decode2 = decoder.decode(new String(encode));
        String str1 = new String(decode);
        String str2 = new String(decode2);
        System.out.println(str1);
        System.out.println(str2);

都可以输出正常的文字,表示解码成功

所以base64编码解码是jdk本身已经实现了的,可以在任意的Java环境下直接使用

可以把二进制的文件编码,如果不是二进制的文件,转化为二进制,比如字符串的getBytes()

同样是对于二进制编码文件解码,虽然可以支持字符串入参实际上还是转化为二进制再进行解码。下面是源码。懂?
在这里插入图片描述

编写Base64编码解码工具包

既然原理和使用方法都知道了,那么我们写一个工具包,下次直接用吧,如果对你有帮助,你可以直接复制代码去用,去看,去研究(不过我想我前面讲解的应该懂了吧,狗头-,-)。

点赞加关注,好运挡不住。

我正准备写个工具包,想了下,看了下spring是不是有工具包了,然后我输入Base64Utils,还真有,idea太好用了…

(别打我,我真不知道,早知道有,我写个寂寞。。。)

import org.springframework.util.Base64Utils;

方法一览
Java Base64加密解密编码解码_第4张图片

所以… ,虽然没有写成工具包,但是只要你明白编码解码的原理和过程,那你自己写也是可以的。(当然spring全家桶还是香啊,小声比比-。-),点个赞呗。

Java Base64加密解密编码解码_第5张图片
(偷来的狗图,侵删)

你可能感兴趣的:(时间图书馆,base64,java,加密解密)