前后端数据加密与解密

前端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加密函数(非异步版本):
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后端解密这个字符串:

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.xdnf.cn/news/148131.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【Python报错已解决】TypeError: ‘<‘ not supported between instances of ‘str‘ and ‘int‘

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 专栏介绍 在软件开发和日常使用中&#xff0c;BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

从规范到实现解读Windows平台如何播放RTSP流

RTSP播放器应用场景 RTSP播放器在视频监控、远程视频会议、网络电视、实时流媒体传输、协同操控相关的智能设备、教育培训以及企业内部通讯与协作等多个领域都有着广泛的应用场景。 1. 视频监控 RTSP直播播放器在视频监控系统中扮演着重要角色。通过RTSP协议&#xff0c;播放…

ComfyUI生成头像

一、下载分享的网盘资源 链接&#xff1a;https://pan.quark.cn/s/706965ed07b5二、解压ComfyUI整合包 找个路径解压整合包&#xff0c;如下图 三、移动model文件 把boleromixPony_v14.safetensors放在Comfyui\ComfyUI\models\checkpoints目录下四、移动lora文件 把从0开始…

【MATLAB源码-第268期】基于simulink的永磁同步电机PMSM双闭环矢量控制系统SVPWM仿真,输出转速响应曲线。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 永磁同步电机&#xff08;PMSM&#xff09;是目前工业领域中广泛使用的一种高效电机&#xff0c;其具有高功率密度、运行效率高、动态响应快等优点。在控制永磁同步电机时&#xff0c;通常采用矢量控制&#xff08;也称为磁场…

MK-1000门控管理系统

MK-1000门控系统简介 1.1 前言 中大型仓库一般由多个仓库组成&#xff0c;每个仓库具有上百个仓库门&#xff0c;人工控制仓库门的开启、闭合等耗时耗力&#xff0c;随着电子信息自动化发展&#xff0c;集中控制仓库门成为现实。本系统可通过网络灵活控制某个仓库的某个门开启、…

萤石云平台接入SVMSPro平台

萤石云平台接入SVMSPro平台 步骤一&#xff1a;进入萤石云官网&#xff1a;https://open.ys7.com/ &#xff0c;点右上角的登陆&#xff0c;填写自己的用户名密码&#xff1b; 步骤二&#xff1a;登陆进去后&#xff0c;开发者服务—>我的账号—>应用信息&#xff0c;在…

nonlocal本质讲解(后篇)——从Nonlocal均值滤波到Transformer的自注意力

Nonlocal均值滤波 → \rightarrow →Nonlocal attention → \rightarrow →Transformer的自注意力 目录 Nonlocal均值滤波Nonlocal attention矩阵表示&#xff0c;这只是为了实现。reshape矩阵运算 相异度矩阵相似度计算1. Gaussian Function&#xff08;高斯函数&#xff09;…

双指针算法介绍与简单运用

双指针算法 一、双指针算法介绍二、常用方法讲解交换力扣&#xff1a;283.移动零大小分类 覆盖力扣&#xff1a;88. 合并两个有序数组C语言 memmove 函数实现 快慢链表的中间结点力扣&#xff1a;141. 环形链表 对撞力扣&#xff1a;9. 回文数力扣&#xff1a;LCR 139. 训练计划…

专业学习|《随机过程》学习笔记(二)(定义、分类及相关过程)

一、随机过程 &#xff08;一&#xff09;随机过程定义 &#xff08;1&#xff09;基本概念 随机过程是随机变量的延伸。 &#xff08;2&#xff09;描述随机过程的方法 &#xff08;3&#xff09;随机过程的分类和举例 &#xff08;4&#xff09;随机过程的数字特征 随机过…

SpringSecurity -- 入门使用

文章目录 什么是 SpringSesurity &#xff1f;细节使用方法 什么是 SpringSesurity &#xff1f; 在我们的开发中&#xff0c;安全还是有些必要的 用 拦截器 和 过滤器 写代码还是比较麻烦。 SpringSecurity 是 SpringBoot 的底层安全默认选型。一般我们需要认证和授权&#xf…

Python文件读取

文件操作的步骤 打开文件读写文件关闭文件 open()打开函数 使用open()可以打开一个已经存在的文件&#xff0c;或者创建一个新文件 open(name,mode,encoding)name:打开文件的文件名&#xff0c;也可以包含具体路径 mode:设置打开文件的模式&#xff1a;只读、写入、追加等…

SpringBoot实战(三十)发送HTTP/HTTPS请求的五种实现方式【下篇】(Okhttp3、RestTemplate、Hutool)

目录 一、五种实现方式对比结果二、Demo接口地址实现方式三、Okhttp3 库实现3.1 简介3.2 Maven依赖3.3 配置文件3.4 配置类3.5 工具类3.6 示例代码3.7 执行结果实现方式四、Spring 的 RestTemplate 实现4.1 简介4.2 Maven依赖4.3 配置文件4.4 配置类4.5 HttpClient 和 RestTemp…

【LLM论文日更】| 俄罗斯套娃嵌入模型

论文&#xff1a;https://proceedings.neurips.cc/paper_files/paper/2022/file/c32319f4868da7613d78af9993100e42-Paper-Conference.pdf代码&#xff1a;GitHub - RAIVNLab/MRL: Code repository for the paper - "Matryoshka Representation Learning"机构&#x…

线程池动态设置线程大小踩坑

在配置线程池核心线程数大小和最大线程数大小后&#xff0c;如果调用线程池setCorePoolSize方法来调整线程池中核心线程的大小&#xff0c;需要特别注意&#xff0c;可能踩坑&#xff0c;说不定增加了线程让你的程序性能更差。 ThreadPoolExecutor有提供一个动态变更线程池核心…

linux中vim编辑器的应用实例

前言 Linux有大量的配置文件&#xff0c;其中编辑一些配置文件&#xff0c;最常用的工具就是 Vim &#xff0c;本文介绍一个实际应用的Vim编辑器开发文档的实例。 Vim是一个类似于Vi的著名的功能强大、高度可定制的文本编辑器&#xff0c;在Vi的基础上改进和增加了很多特性。…

单片机原理及应用详解

目录 1. 什么是单片机&#xff1f; 2. 单片机的基本组成 3. 单片机的工作原理 4. 常见的单片机分类 5. 单片机的应用领域 6. 单片机开发流程 7. 单片机开发中的常见问题及解决方案 8. 单片机的未来发展趋势 9. 总结 1. 什么是单片机&#xff1f; 单片机&#xff08;Mi…

solidwork中圆角的快捷操作

第一步 第二步&#xff1a; 选择一条边 快捷选择多个边&#xff0c;就不用一个个去点

代码随想录算法day37 | 动态规划算法part10 | 300.最长递增子序列,674. 最长连续递增序列,718. 最长重复子数组

今天开始正式子序列系列&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 300.最长递增子序列 本题是比较简单的&#xff0c;感受感受一下子序列题目的思路。 力扣题目链接(opens new window) 给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长…

视频怎么剪切掉一部分?6款视频剪切软件,零基础也能快速学会!

您是否也曾遇到了这样的一个问题&#xff1a;在录制完视频之后&#xff0c;发现视频中存在一些多余或者不想要的片段&#xff0c;想要将它剪切掉却不知道具体要怎么操作&#xff1f;别担心&#xff0c;几乎所有视频都会需要这样的调整才能更加出色。如果您是刚入门的视频剪辑初…

排序算法的分析和应用

自己设计一个长度不小于10的乱序数组&#xff0c;用希尔排序&#xff0c;自己设定希尔排序参数 画出每一轮希尔排序的状态 自己设计一个长度不小于10的乱序数组&#xff0c;用堆排序&#xff0c;最终要生成升序数组&#xff0c;画出建堆后的状态 画出每一轮堆排序的状态 自…