前端代码
key 自主生成
iv 自主生成
import CryptoJS from "crypto-js";
// 加密
export function Encrypt(word) {
let key = '';
let iv = '';
key = CryptoJS.enc.Utf8.parse(key);
iv = CryptoJS.enc.Utf8.parse(iv);
let str = ''
if (typeof (word) == 'string') {
str = word
} else if (typeof (word) == 'object') {
str = JSON.stringify(word);
}
let srcs = CryptoJS.enc.Utf8.parse(str);
// 加密模式为CBC,补码方式为PKCS5Padding(也就是PKCS7)
let encrypted = CryptoJS.AES.encrypt(srcs, key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
//返回Hex
return CryptoJS.enc.Hex.stringify(encrypted.ciphertext);
}
// 解密
export function Decrypt(word) {
let key = '';
let iv = '';
key = CryptoJS.enc.Utf8.parse(key);
iv = CryptoJS.enc.Utf8.parse(iv);
let base64 = CryptoJS.enc.Hex.parse(word);
let src = CryptoJS.enc.Base64.stringify(base64);
// 解密模式为CBC,补码方式为PKCS5Padding(也就是PKCS7)
let decrypt = CryptoJS.AES.decrypt(src, key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
let decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
return decryptedStr.toString();
}
后端代码
/**
* 解密操作
* @param content 待解密内容
* @param encodingFormat 编码⽅式
* @param sKey 密钥
* @param ivParameter 偏移量
* @return
* @throws Exception
*/
public static String decrypt(String content, String encodingFormat, String sKey, String ivParameter) {
try {
byte[] raw = sKey.getBytes("ASCII");
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
IvParameterSpec iv = new IvParameterSpec(ivParameter.getBytes());
cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
byte[] bytes = Hex.decodeHex(content);
byte[] original = cipher.doFinal(bytes);
String originalString = new String(original, encodingFormat);
return originalString;
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
}
/**
* 加密操作
* @param content 待加密内容
* @param encodingFormat 编码⽅式
* @param sKey 密钥
* @param ivParameter 偏移量
* @return
* @throws Exception
*/
public static String encrypt(String content, String encodingFormat, String sKey, String ivParameter) {
try {
byte[] raw = sKey.getBytes();
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
IvParameterSpec iv = new IvParameterSpec(ivParameter.getBytes());
cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
byte[] encrypted = cipher.doFinal(content.getBytes(encodingFormat));
return Hex.encodeHexString(encrypted).toLowerCase();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}