前端加解密帮助类
/*
* 前端加解密帮助类
*/
const AesHelper = function (param) {
let config = {
key:'4c04ad9c8723bf00',
iv:'5d2a817a522099fa'
};
config = {...config,...param};
AesHelper.prototype.encrypt = (text) => {
return CryptoJS.AES.encrypt(text, CryptoJS.enc.Utf8.parse(config.key), {
iv: CryptoJS.enc.Utf8.parse(config.iv),
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
}).toString();
};
AesHelper.prototype.decrypt = (text) => {
return CryptoJS.AES.decrypt(text, CryptoJS.enc.Utf8.parse(config.key), {
iv: CryptoJS.enc.Utf8.parse(config.iv),
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
}).toString(CryptoJS.enc.Utf8);
}
};
前端ajax设置参数加密
/*
*前端ajax设置参数加密
*/
$.ajaxSetup({
beforeSend: function() {
let requestType = arguments[1].type.toLocaleLowerCase();
if(requestType === "get"){
var url = arguments[1].url;
if(url.indexOf("?") && url.split("?").length !== 0){
let split = url.split("?");
let requestParams = decodeURIComponent(split[1]);
let encrypt = new AesHelper().encrypt(requestParams);
encrypt = encodeURIComponent(encrypt);
arguments[1].url = `${split[0]}?content=${encrypt}`;
}
}else if(requestType === "post"){
if(! (arguments[1].data instanceof FormData)){
let requestParams = decodeURIComponent(arguments[1].data);
let encrypt = new AesHelper().encrypt(requestParams);
encrypt = encodeURIComponent(encrypt);
arguments[1].data = `content=${encrypt}`;
}
}
}
});
JAVA后台解密
@WebFilter(urlPatterns = {"/*"})
public class DecodeFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
ChangeRequestWrapper changeRequestWrapper = new ChangeRequestWrapper((HttpServletRequest) servletRequest);
Map<String, String[]> parameterMap = new HashMap<>(changeRequestWrapper.getParameterMap());
if(parameterMap.containsKey("content")){
String[] strings = parameterMap.get("content");
String encryptedData = strings[0];
//解密
String decrypt = AesUtil.decrypt(encryptedData);
//拆分
if(!StringUtil.isBlank(decrypt)){
Map<String, Object> map = MapUtil.formSerializeToMap(decrypt);
parameterMap.clear();
for(String keys:map.keySet()){
String[] values = new String[]{map.get(keys)+""};
parameterMap.put(keys,values);
}
}
changeRequestWrapper.setParameterMap(parameterMap);
//使用复写后的wrapper
filterChain.doFilter(changeRequestWrapper, servletResponse);
}else {
filterChain.doFilter(servletRequest, servletResponse);
}
}
@Override
public void destroy() {
}
}
JAVA后台解密帮助类
public class AesUtil {
private static final String KEY = "key";
private static final String IV = "iv";
static {
Security.addProvider(new BouncyCastleProvider());
}
public static String encrypt(String data){
try {
return encrypt(data,KEY,IV);
} catch (Exception e) {
return "";
}
}
public static String decrypt(String encryptedData){
try {
return decrypt(encryptedData,KEY,IV);
} catch (Exception e) {
return "";
}
}
public static String encrypt(String data,String sessionKey,String iv) throws Exception {
Base64.Encoder encoder = Base64.getEncoder();
String baseData = encoder.encodeToString(data.getBytes());
String baseSessionKey = encoder.encodeToString(sessionKey.getBytes());
String baseIv = encoder.encodeToString(iv.getBytes());
Base64.Decoder decoder = Base64.getDecoder();
byte[] dataByte = decoder.decode(baseData);
byte[] keyByte = decoder.decode(baseSessionKey);
byte[] ivByte = decoder.decode(baseIv);
String encryptedData = null;
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding","BC");
Key sKeySpec = new SecretKeySpec(keyByte, "AES");
AlgorithmParameters params = AlgorithmParameters.getInstance("AES");
params.init(new IvParameterSpec(ivByte));
cipher.init(Cipher.ENCRYPT_MODE, sKeySpec, params);
byte[] result = cipher.doFinal(dataByte);
encryptedData = encoder.encodeToString(result);
return encryptedData;
}
public static String decrypt(String encryptedData,String sessionKey,String iv) throws Exception {
Base64.Encoder encoder = Base64.getEncoder();
String baseSessionKey = encoder.encodeToString(sessionKey.getBytes());
String baseIv = encoder.encodeToString(iv.getBytes());
Base64.Decoder decoder = Base64.getDecoder();
byte[] dataByte = decoder.decode(encryptedData);
byte[] keyByte = decoder.decode(baseSessionKey);
byte[] ivByte = decoder.decode(baseIv);
String data = null;
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding","BC");
Key sKeySpec = new SecretKeySpec(keyByte, "AES");
AlgorithmParameters params = AlgorithmParameters.getInstance("AES");
params.init(new IvParameterSpec(ivByte));
cipher.init(Cipher.DECRYPT_MODE, sKeySpec, params);
byte[] result = cipher.doFinal(dataByte);
data = new String(result);
return data;
}
}