前后端数据加密与解密

server/2024/9/29 22:15:15/

前端js加密,后端java数据解密

使用CryptoJS进行加密

CryptoJS是一个JavaScript库,支持多种加密算法,包括AES。下面是使用CryptoJS进行加密的一个例子。

首先,你需要引入CryptoJS库。可以通过CDN或者安装到项目中来使用:

<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js"></script>
JavaScript AES加密函数(非异步版本):
javascript>javascript">function encryptData(data, key) {// 使用CryptoJS库进行AES加密var encrypted = CryptoJS.AES.encrypt(data, key); // 这里的key应该是转换成字节数组后的密钥return encrypted.toString();
}// 使用示例
var key = "your-encryption-key"; // 密钥,需要保证长度合适
var data = "Hello, World!";
var encryptedData = encryptData(data, key);
console.log("Encrypted Data:", encryptedData);

后端 Java 解密示例

使用同样的密钥,在Java后端解密这个字符串:

java">import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;public class AESDecryption {private static final String ALGORITHM = "AES/CBC/PKCS5Padding";public static String decrypt(String encryptedData, SecretKey secretKey, byte[] iv) throws Exception {Cipher cipher = Cipher.getInstance(ALGORITHM);cipher.init(Cipher.DECRYPT_MODE, secretKey, new IvParameterSpec(iv));// 处理CryptoJS的格式String base64Content = encryptedData.split("\\.")[1];byte[] base64ContentBytes = Base64.getDecoder().decode(base64Content);byte[] decryptedBytes = cipher.doFinal(base64ContentBytes);return new String(decryptedBytes);}public static void main(String[] args) throws Exception {String encryptedData = "U2FsdGVkX1+eG..."; // 从前端获取的加密数据String key = "your-encryption-key";byte[] iv = "InitializationVe...".getBytes(); // 用于CBC模式的初始化向量SecretKey secretKey = new SecretKeySpec(key.getBytes(), "AES");String decryptedData = decrypt(encryptedData, secretKey, iv);System.out.println("Decrypted Data: " + decryptedData);}
}

注意事项

  1. 密钥长度:确保你的密钥长度符合AES的要求(128位、192位或256位)。CryptoJS默认情况下接受任意长度的字符串,但它实际上会在内部将该字符串转换为固定长度的密钥。
  2. IV 长度:对于CBC模式,IV长度应该与块大小相匹配,通常是16字节(128位)。
  3. 加密格式:CryptoJS返回的加密结果是一个包含头信息的字符串,因此在Java解密时需要提取正确的部分进行解密。
  4. 安全性:在实际应用中,请确保使用足够强度的密钥,并且密钥不应直接硬编码在代码中。

使用这种方式,你可以实现前后端之间的简单加密解密功能。不过,对于生产环境的应用程序,强烈建议采取更严格的安全措施。


http://www.ppmy.cn/server/124678.html

相关文章

【C++掌中宝】从std的角度来进一步了解命名空间

文章目录 前言1. 什么是命名空间&#xff08;namespace&#xff09;&#xff1f;2. \<iostream\>和\<iostream.h\>的区别3. C命名空间的三种使用方式3.1 直接指定标识符3.2 使用 using 关键字3.3 使用 using namespace std 4. 为什么避免使用 using namespace std5…

java基础(4)类和对象

目录 1.前言 2.正文 2.1类的定义与使用 2.1.1类的定义 2.1.2类的实例化 2.1.3this引用 2.1.3.1 访问当前对象的成员变量 2.1.3.2调用当前对象的成员方法 2.1.3.3构造函数中的 this 2.1.3.4归纳this 2.2封装 2.2.1封装的定义 2.2.2访问修饰符 2.3static 2.3.1sta…

[leetcode]77_组合_给定数字范围且输出无重复

给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。示例 1&#xff1a; 输入&#xff1a;n 4, k 2 输出&#xff1a; [[2,4],[3,4],[2,3],[1,2],[1,3],[1,4], ] 示例 2&#xff1a; 输入&#xff1a;n 1, k 1 输出…

20240926 关于Goland处理wsl-GOROOT原理猜测

GOROOT的原理 go sdk与java jdk类似&#xff0c;是go的编译工具链的集合。 在windows上&#xff0c;我们通过在系统环境变量中添加GOROOT并设置为go sdk地址&#xff0c;使得命令行可以访问到go sdk并执行go test、build等命令&#xff0c;这样设置的变量是全局生效的&#x…

JAVA实体需要加@Builder吗(构建器模式)

对于JAVA中两种设置属性值的方式有什么区别&#xff0c;这里做下记录 问题一&#xff1a;JAVA实体什么时候需要加Builder&#xff1f; 在Java中&#xff0c;Builder 注解通常用于简化创建对象时构造函数的调用。当你有一个实体类&#xff08;Entity&#xff09;或数据传输对象&…

Spring是什么

Spring是一个轻量级的开源的J2EE框架。它是一个容器框架&#xff0c;用来装javabean(java对象)&#xff0c;中间层框架(万能胶)可以起一个连接作用&#xff0c;比如说把Struts和Hibernate粘合在一起运用&#xff0c;可以让我们的企业开发更快、更简活。 Spring是一个轻量级的控…

c# 子类继承父类接口问题

在C#中&#xff0c;子类并不直接“继承”父类继承的接口&#xff0c;但子类的确会继承父类对接口的实现&#xff08;如果父类实现了该接口&#xff09;。这里有一些关键的概念需要澄清&#xff1a; 接口继承&#xff1a;当一个类实现了某个接口时&#xff0c;它必须实现接口中…

828华为云征文 | 使用Flexus X实例搭建Dubbo-Admin服务

一、Flexus X实例简介 华为云推出的Flexus云服务&#xff0c;作为专为中小企业及开发者设计的新一代云服务产品&#xff0c;以其开箱即用、体验卓越及高性价比而著称。其中的Flexus云服务器X实例&#xff0c;更是针对柔性算力需求量身打造&#xff0c;能够智能适应业务负载变化…