网站首页 > 技术文章 正文
下面为你介绍前端传递参数加密、Java 后端接收数据解密的实现方法,这里以常见的 AES 对称加密算法为例。
前端加密(使用 JavaScript 和 CryptoJS 库)
CryptoJS 是一个强大的 JavaScript 加密库,可用于前端加密。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Frontend Encryption</title>
<!--引入了 CryptoJS 库-->
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js"></script>
</head>
<body>
<input type="text" id="param" placeholder="Enter parameter">
<button onclick="encryptAndSend()">Send</button>
<script>
function encryptAndSend() {
const param = document.getElementById('param').value;
// 16字节的密钥 自己定义
const key = CryptoJS.enc.Utf8.parse('xxxyyyzgmxsxjfxy');
const encrypted = CryptoJS.AES.encrypt(param, key, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
const encryptedParam = encrypted.toString();
// 这里模拟发送加密后的参数到后端
console.log('Encrypted parameter:', encryptedParam);
}
</script>
</body>
</html>
在上述代码中,首先引入了 CryptoJS 库,然后定义了一个 encryptAndSend 函数,该函数会获取输入框中的参数,使用 AES 算法进行加密,并将加密后的参数打印到控制台。
后端解密(Java)
Java 提供了 javax.crypto包来实现加密和解密操作。
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
public class AESDecryption {
private static final String ALGORITHM = "AES";
private static final String TRANSFORMATION = "AES/ECB/PKCS5Padding";
private static final String KEY = "xxxyyyzgmxsxjfxy"; // 16字节的密钥
public static String decrypt(String encryptedData) throws Exception {
SecretKeySpec secretKey = new SecretKeySpec(KEY.getBytes(StandardCharsets.UTF_8), ALGORITHM);
Cipher cipher = Cipher.getInstance(TRANSFORMATION);
cipher.init(Cipher.DECRYPT_MODE, secretKey);
byte[] decodedBytes = Base64.getDecoder().decode(encryptedData);
byte[] decryptedBytes = cipher.doFinal(decodedBytes);
return new String(decryptedBytes, StandardCharsets.UTF_8);
}
public static void main(String[] args) {
try {
String encryptedParam = "eXH1hDuwDQ+MlHme53FHEA=="; // 替换为实际的加密参数
String decryptedParam = decrypt(encryptedParam);
System.out.println("Decrypted parameter: " + decryptedParam);
} catch (Exception e) {
e.printStackTrace();
}
}
}
在上述 Java 代码中,定义了一个AESDecryption 类,其中 decrypt 方法用于解密接收到的加密参数。在 main 方法中,调用 decrypt 方法对加密参数进行解密,并将解密后的结果打印到控制台。
如果出现以下报错,请检查下面四项。
javax.crypto.BadPaddingException: Given final block not properly padded. Such issues can arise if a bad key is used during decryption.
at com.sun.crypto.provider.CipherCore.unpad(CipherCore.java:975)
at com.sun.crypto.provider.CipherCore.fillOutputBuffer(CipherCore.java:1056)
at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:853)
at com.sun.crypto.provider.AESCipher.engineDoFinal(AESCipher.java:446)
at javax.crypto.Cipher.doFinal(Cipher.java:2170)
- 密钥一致性:前端和后端使用的密钥必须一致,否则无法正确解密。
- 填充模式:前端和后端使用的填充模式(如 PKCS5Padding)必须一致。
- 编码问题:前端加密后的结果通常是 Base64 编码的字符串,后端在解密前需要先进行 Base64 解码。
- 安全性:AES 是对称加密算法,密钥的安全传输和存储非常重要。在实际应用中,建议使用 HTTPS 来保证密钥和数据的安全传输。
以上代码展示了前端使用 JavaScript 和 CryptoJS 库进行加密,Java 后端使用 javax.crypto 包进行解密的基本实现方法。你可以根据实际需求进行调整和扩展。
猜你喜欢
- 2025-05-10 金三银四,我先去阿里了,这份阿里内部Java面试神技送你们啦
- 2025-05-10 前端卷Java:我被Shiro的setCipherKey方法坑惨了
- 2025-05-10 Java线程池面试要点(java线程池应用情景面试)
- 2025-05-10 面渣逆袭必看Java中高级面试指南,Github标星4.3k+!
- 2025-05-10 金蝶一面:Java基本数据类型有哪些?包装类型的常量池技术了解么
- 2025-05-10 冲了,最新IT大厂Java八股文面试背诵版
- 2024-09-18 前端修炼之路
- 2024-09-18 Java面试-前端基础
- 2024-09-18 学Java好还是学前端好,知了堂从两者的薪资和学习过程详细分析
- 2024-09-18 前端和Java学哪个好?哪个工资更高?
你 发表评论:
欢迎- 05-10如何优化数据库和前端之间的交互?
- 05-10前端代码优化小秘籍(前端优化24条建议)
- 05-10VS Code当中的15个神仙插件,值得收藏
- 05-10如何自己开发一个Google浏览器插件?
- 05-10前端流行框架Vue3教程:14. 组件传递Props效验
- 05-10吃了一年的SU,最好用的插件都在这了
- 05-10前端必看!这款神器让网站界面告别千篇一律
- 05-10程序员请收好:10个非常有用的 Visual Studio Code 插件
- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端md5加密 (49)
- 前端路由 (55)
- 前端数组 (65)
- 前端定时器 (47)
- 前端懒加载 (45)
- 前端接口 (46)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle查询数据库 (45)
- oracle约束 (46)
- oracle 中文 (51)
- oracle链接 (47)
- oracle的函数 (57)
- mac oracle (47)
- 前端调试 (52)
- 前端登录页面 (48)
本文暂时没有评论,来添加一个吧(●'◡'●)