网站首页 > 技术文章 正文
下面为你介绍前端传递参数加密、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学哪个好?哪个工资更高?
你 发表评论:
欢迎- 06-24发现一款开源宝藏级工作流低代码快速开发平台
- 06-24程序员危险了,这是一个 无代码平台+AI+code做项目的案例
- 06-24一款全新的工作流,低代码快速开发平台
- 06-24如何用好AI,改造自己的设计工作流?
- 06-24濮阳网站开发(濮阳网站建设)
- 06-24AI 如何重塑前端开发,我们该如何适应
- 06-24应届生靠这个Java简历模板拿下了5个offer
- 06-24服务端性能测试实战3-性能测试脚本开发
- 567℃几个Oracle空值处理函数 oracle处理null值的函数
- 566℃Oracle分析函数之Lag和Lead()使用
- 550℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 545℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 544℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 536℃【数据统计分析】详解Oracle分组函数之CUBE
- 526℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 519℃Oracle有哪些常见的函数? oracle中常用的函数
- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端react (48)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端富文本编辑器 (47)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle 中文 (51)
- oracle的函数 (57)
- 前端调试 (52)
- 前端登录页面 (48)
本文暂时没有评论,来添加一个吧(●'◡'●)