最近公司要求我完善一个测试APP,由公司的前辈搭建好主体框架,然后由我这个菜鸟来进行功能的开发。(文章只是记录一下自己遇到的问题,给以后的工作提个醒)
首先做的就是对需要发送的数据进行ASE加密,具体代码如下(因为AES加解密的工具类前辈已经写好了,所以我只需要调用方法就好了)
encrypt = AESUtils.encrypt(a.getBytes(), AESKEY.getBytes()); //AES加密
首先我的a是自定义的一个变量,赋的是json对象,因为是String类型的,所以需要先调用.getByte()方法,转换成字节型。
然后对AES加密后的数据进行base64转码(因为AES加密后显示的加密数据存在乱码,所以用base64进行转码),因为base64的包安卓有自带,所以只需要import就好了。
import android.util.Base64;
之后就是转码的代码了(这里有踩到坑),网上给的代码是这样的
String strBase64 = Base64.encodeToString(str.getBytes(), Base64.DEFAULT);
主要看他的方法,因为它是直接用的base64,没有用AES加密过,所以他的数据类型是String类型的,要先通过调用.getByte()方法,转换成字节型。(而我傻傻的照搬的,被自己蠢哭)
而我们已经用AES加密过了,数据已经转换成了字节型,所以不需要在转化,直接使用加密后的变量就好了,这里是encrypt
strB64 = Base64.encodeToString(encrypt, Base64.DEFAULT); //base64编码
这样之后显示的加密信息就不是乱码了。
再之后的话就是解密了,别搞错了顺序(我就搞错了,蠢哭)
先解base64的。
这是网上给的方法
String str2 = new String(Base64.decode(strBase64.getBytes(), Base64.DEFAULT));
因为我上面base64转码的时候ToString已经转成了String类型,所以就不用强制类型转换成String了
jstrB64=Base64.decode(strB64,Base64.DEFAULT); //base64解码
最后就是解AES的了,需要注意的是上面解完base64后,jstrB64是字节型的,所以在解AES时传入的参数不需要在调用.getByte()方法,转换成字节型。直接传入就好了,然后生成的数据还是字节型的,所以这个时候需要强制类型转换成String类型的
ww=new String(AESUtils.decrypt(jstrB64,AESKEY.getBytes())); //AES解码
最后留下前辈写的AES加解密的工具类代码
package com.assem.Devi