Aes加密解密java加密解密
使⽤AES加密解密代码详解
⾸先,如果是使⽤nodejs + vue 写的前端, 那么你需要npm 加载⼀个js⽂件
npm i crypto-js --save --save-exact
npm install crypto-js
java代码加密解密类
pto;
pto.Cipher;
pto.spec.SecretKeySpec;
import dec.binary.Base64;
import org.apachemons.logging.Log;
import org.apachemons.logging.LogFactory;
public class Aes {
private static final Log logger = Log(Aes.class); // log⽇志
private static final String ALGORITHM = "AES/ECB/PKCS5Padding"; // "算法/模式/补码⽅式"
/*****************************************************
* AES加密
*
* @param content
* 加密内容
* @param key
* 加密密码,由字母或数字组成此⽅法使⽤AES-128-ECB加密模式,key需要为16位
* 加密解密key必须相同,如:abcd1234abcd1234
* @return 加密密⽂
****************************************************/
public static String enCode(String content, String key) {
if (key == null || "".equals(key)) {
logger.info("key为空!");
return null;
}
if (key.length() != 16) {
logger.info("key长度不是16位!");
return null;
}
try {
byte[] raw = Bytes(); // 获得密码的字节数组
SecretKeySpec skey = new SecretKeySpec(raw, "AES"); // 根据密码⽣成AES密钥
Cipher cipher = Instance(ALGORITHM); // 根据指定算法ALGORITHM⾃成密码器
cipher.init(Cipher.ENCRYPT_MODE, skey); // 初始化密码器,第⼀个参数为加密(ENCRYPT_MODE)或者解密(DECRYPT_MODE)操作,第⼆个参数为⽣成的AES密钥
byte[] byte_content = Bytes("utf-8"); // 获取加密内容的字节数组(设置为utf-8)不然内容中如果有中⽂和英⽂混合中⽂就会解密为乱码
byte[] encode_content = cipher.doFinal(byte_content); // 密码器加密数据
deBase64String(encode_content); // 将加密后的数据转换为字符串返回
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/*****************************************************
* AES解密
*
* @param content
* 加密密⽂
js代码加密软件* @param key
* 加密密码,由字母或数字组成此⽅法使⽤AES-128-ECB加密模式,key需要为16位加密解密key必须相同
* @return 解密明⽂
****************************************************/
public static String deCode(String content, String key) {
if (key == null || "".equals(key)) {
logger.info("key为空!");
return null;
}
if (key.length() != 16) {
logger.info("key长度不是16位!");
return null;
}
try {
byte[] raw = Bytes(); // 获得密码的字节数组
SecretKeySpec skey = new SecretKeySpec(raw, "AES"); // 根据密码⽣成AES密钥
Cipher cipher = Instance(ALGORITHM); // 根据指定算法ALGORITHM⾃成密码器
cipher.init(Cipher.DECRYPT_MODE, skey); // 初始化密码器,第⼀个参数为加密(ENCRYPT_MODE)或者解密(DECRYPT_MODE)操作,第⼆个参数为⽣成的AES密钥
byte[] encode_content = Base64.decodeBase64(content); // 把密⽂字符串转回密⽂字节数组
byte[] byte_content = cipher.doFinal(encode_content); // 密码器解密数据
return new String(byte_content, "utf-8"); // 将解密后的数据转换为字符串返回
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/*****************************************************
* AES加密解密测试
*
* @param args
* @return
****************************************************/
public static void main(String[] args) {
String content = "加密解密测试";
logger.info("加密content:" + content);
String key = "abcd1234abcd1234";
logger.info("加密key:" + key);
String enResult = enCode(content, key);
logger.info("加密result:" + enResult);
String deResult = deCode(enResult, key);
logger.info("解密result:" + deResult);
}
}
java类中加密解密使⽤⽅式
@ResponseBody
@RequestMapping("/getqingHou")
public String getqingHou(HttpServletRequest request, HttpServletResponse response) throws Exception {
try {
Map map = ParameterMap(request);
Map retuData = new HashMap<>(16);
map.put("role", "admin");
/*****************前端传过来的加密值,进⾏解密*********************************************************/
String keyC = ("keyC").toString();
String contC = ("contentC").toString();
System.out.println(keyC + " : " + contC);
String decC = new String(Aes.deCode(contC, keyC));
System.out.println("前端传进来的数据:解密后----》》》 " + decC);
System.out.println("------------------------------------------------------------------");
/**************************加密字符串,解密字符串****************************************************/
// 1234567890ABCDEF1234567890ABCDEf
String key = UUID.randomUUID().toString().replace("-", "").toUpperCase().toString().substring(0,14) + "==";
String src = "Ejian111234";
System.out.println("key---->>>> "+key);
// 加密字符串
String enc = Code(src, key);
System.out.println("加密后---》》》 " + enc);
// 解密后
String dec = new String(Aes.deCode(enc, key));
System.out.println("解密后----》》》 " + dec);
System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@");
/***************************加密数组,传到前端进⾏解密***************************************************/
String mapEnc = JSONString(map), key);
System.out.println("集合类型加密后的数据: " + mapEnc);
retuData.put("enc", enc);
retuData.put("key", key);
retuData.put("map", mapEnc);
logger.info("+++++++get user info !" + retuData);
JSONString(retuData);
} catch (LoginException e) {
<(e.getMessage());
ErrorCode() + "_" + e.getMessage();
}
}
js代码加密解密⽅法
const CryptoJS = require("crypto-js")
/*****************************************************
* AES加密
* @param content 加密内容
* @param key 加密密码,由字母或数字组成
此⽅法使⽤AES-128-ECB加密模式,key需要为16位
加密解密key必须相同,如:abcd1234abcd1234
* @return 加密密⽂
****************************************************/
export function encrypt(content, key) {
const sKey = Utf8.parse(key);
const sContent = Utf8.parse(content);
const encrypted = pt(sContent, sKey, {de.ECB,padding: CryptoJS.pad.Pkcs7}); String();
}
/*****************************************************
* AES解密
* @param content 加密密⽂
* @param key 加密密码,由字母或数字组成
此⽅法使⽤AES-128-ECB加密模式,key需要为16位
加密解密key必须相同,如:abcd1234abcd1234
* @return 解密明⽂
****************************************************/
export function decrypt(content, key) {
const sKey = Utf8.parse(key);
const decrypt = CryptoJS.AES.decrypt(content, sKey, {de.ECB,padding: CryptoJS.pad.Pkcs7});
Utf8.stringify(decrypt).toString();
}
前端加密解密使⽤⽅法
<script>
import { getqingHou } from "api/test.js";
import { decrypt, encrypt } from "api/cryptoAes.js"
var CryptoJS = require("crypto-js")
export default {
name: "login",
created() {
},
methods: {
getqingHouFun() {
console.log('============test===start===========')
getqingHou({test: 'test', keyC: '1234567890ABCDEF', contentC: encrypt('Ejian111234567890', '1234567890ABCDEF')}).then(response => { console.log(response.data)
console.log('=====================aes===================')
// npm i crypto-js --save --save-exact
// npm install crypto-js
var decrypt1 = decrypt(, response.data.key);
console.log("后端解密后的数据: ---字符串类型>>> " + decrypt1)
var decrypt2 = decrypt(response.data.map, response.data.key);
console.log("后端解密后的数据:---集合类型>>> " + decrypt2)
var json = JSON.parse(decrypt2);
console.log("后端解密后的数据:---集合类型>>>------转JSON>>> " + tC)
console.log('===========test===end===================')
})
}
}
}
</script>
好了,代码全部贴出来了, 直接copy就能⽤, 记得看过点赞, 发个⾔在⾛哦!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论