有一些接口数据,我们需要做加密后返回给前端,然后前端就需要去做解密。所以就需要相同加解密算法,在不同语言下的实现。
下面的代码是后端使用了hutool工具包的AES加密,然后前端使用 CryptoJS 去做对应的解密。
Java
加密
public class EncryptUtil {
public static String encrypt(String data, String key) {
String encryptedData = SecureUtil.aes(key.getBytes()).encryptHex(data);
return Base64.getEncoder().encodeToString(encryptedData.getBytes(StandardCharsets.UTF_8));
}
}
解密
public static String decrypt(String encryptedData, String key) {
byte[] base64Decode = Base64.getDecoder().decode(encryptedData);
return SecureUtil.aes(key.getBytes()).decryptStr(new String(base64Decode, StandardCharsets.UTF_8));
}
JS
解密
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>AES Decryption Test</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js"></script>
</head>
<body>
<script>
function decrypt(word, keyStr, iv) {
let decodedString = CryptoJS.enc.Base64.parse(word).toString(CryptoJS.enc.Utf8);
let key = CryptoJS.enc.Utf8.parse(keyStr);
let ivs = CryptoJS.enc.Utf8.parse(iv);
let encryptedHexStr = CryptoJS.enc.Hex.parse(decodedString);
let srcs = CryptoJS.enc.Base64.stringify(encryptedHexStr);
let decrypt = CryptoJS.AES.decrypt(srcs, key, {
iv: ivs,
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
let decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
console.log(decryptedStr)
return decryptedStr.toString();
}
var encryptedData = ""; // 替换为实际的加密数据
var key = ""; // 替换为实际的密钥
var decode = decrypt(encryptedData, key, "");
console.log("解密后:" + decode);
</script>
</body>
</html>