JSEncrypt 库 :

- 引入了 jsencrypt/bin/jsencrypt.min
- 需要在项目中安装 jsencrypt 包

npm install jsencrypt
import JSEncrypt from 'jsencrypt/bin/jsencrypt.min'// 密钥对生成 http://web.chacuo.net/netrsakeypairconst publicKey = 'MFwAAQ=='const privateKey = 'MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAqhHyZfSsYourNxaY\n' +'7Nt+PrgrxkiA50efORdI5U5lY='// 加密
export function encrypt(txt) {const encryptor = new JSEncrypt()encryptor.setPublicKey(publicKey) // 设置公钥return encryptor.encrypt(txt) // 对数据进行加密
}// 解密
export function decrypt(txt) {const encryptor = new JSEncrypt()encryptor.setPrivateKey(privateKey) // 设置私钥return encryptor.decrypt(txt) // 对数据进行解密
}

 这个页面是根据路由转的,再url的参数上把他们合为一个json对象再加密

 

 点击的页面根据路由监听获取数据,先解密再解析json对象

 

 因为这里有一个二维码功能,二维码的网址对应也需要加密,所以后端也需要加密,后端也使用的

RSA加密,配置公钥为前端的公钥进行加密

 

 public String qrcode(Long id) {try {Wn wn = this.wnMapper.selectWnById(id);if (wn == null) {throw new RuntimeException("微脑信息不存在");}String dateStr = DateUtils.parseDateToStr("yyyyMMdd", new Date());String basePath = profilePath + "/qccode/" + dateStr + "/" + id;String basepathtourl = "/profile/qccode/" + dateStr + "/" + id + "/qrcode.png";// 创建目录(如果不存在)File dir = new File(basePath);if (!dir.exists()) {dir.mkdirs();}String qrCodePath = basePath + "/qrcode.png";// 使用 Hutool 生成二维码QrCodeUtil.generate(RSAEncryptor.generateQrCodeUrl(wn), 300, 300, FileUtil.file(qrCodePath));return basepathtourl;} catch (Exception e) {throw new RuntimeException("生成二维码失败: " + e.getMessage(), e);}}
package com.smart.common.utils.uuid;import com.smart.project.wn.domain.Wn;import javax.crypto.Cipher;
import java.net.URLEncoder;
import java.security.KeyFactory;
import java.security.PublicKey;
import java.security.spec.X509EncodedKeySpec;
import java.util.Base64;public class RSAEncryptor {private static final String PUBLIC_KEY = "MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKoR8mX0rGKLqzcWmOzbfj64K8ZIgOdHnzkXSOVOZbFu/TJhZ7rFAN+eaGkl3C4buccQd/EjEsj9ir7ijT7h96MCAwEAAQ==";public static String encrypt(String data) throws Exception {// 处理公钥字符串String publicKeyPEM = PUBLIC_KEY.replace("\\n", "").replace("-----BEGIN PUBLIC KEY-----", "").replace("-----END PUBLIC KEY-----", "");// 添加额外的安全检查,确保 Base64 字符串合法if (!isValidBase64(publicKeyPEM)) {throw new IllegalArgumentException("Invalid Base64 string for public key");}byte[] encoded = Base64.getDecoder().decode(publicKeyPEM);X509EncodedKeySpec keySpec = new X509EncodedKeySpec(encoded);PublicKey pubKey = KeyFactory.getInstance("RSA").generatePublic(keySpec);Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");cipher.init(Cipher.ENCRYPT_MODE, pubKey);byte[] encryptedBytes = cipher.doFinal(data.getBytes());return Base64.getEncoder().encodeToString(encryptedBytes);}// 新增 Base64 验证工具方法private static boolean isValidBase64(String input) {try {Base64.getDecoder().decode(input);return true;} catch (IllegalArgumentException e) {return false;}}public static String generateQrCodeUrl(Wn wn) throws Exception {String baseUrl = "http://192.168.0.7";// 创建包含wnId和wnNum的JSON对象String jsonData = String.format("{\"wnId\":\"%s\",\"wnNum\":\"%s\"}", wn.getId(), wn.getWnNum());String encryptedData = encrypt(jsonData);return baseUrl + "/wn/WnDetail?data=" + URLEncoder.encode(encryptedData, "UTF-8");
}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/87280.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/87280.shtml
英文地址,请注明出处:http://en.pswp.cn/web/87280.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何用 Kafka Manager 实现 Kafka 集群全面监控

1. 前言:为什么需要 Kafka 集群监控? Apache Kafka 是现代大数据架构中不可或缺的组件,广泛用于日志收集、流处理、消息队列等场景。随着 Kafka 集群规模的增长和业务复杂度的提升,对 Kafka 的实时监控变得尤为重要。 1.1 Kafka 在大数据架构中的核心地位 Kafka 被广泛应…

MyBatis架构原理解析:核心对象与执行流程深度剖析

一、开篇:理解MyBatis的核心价值 在当今Java持久层框架生态中,MyBatis凭借其灵活的SQL控制能力和简洁的ORM实现成为企业级应用的首选。与JPA的全自动ORM不同,MyBatis采用半自动化映射理念,在保持SQL灵活性的同时,通过…

移远通信携手高通:以全栈车载解决方案,共绘智能出行新蓝图

6月26日至27日,2025高通汽车技术与合作峰会于苏州盛大举办。本次峰会以 “我们一起,行稳智远” 为主题,全方位呈现智能汽车全栈技术、全产业链生态与全场景体验。作为高通长期稳定的战略合作伙伴,移远通信携全栈车载智能解决方案深…

拿来就能用的python 课程 1

拿来就能用的python 课程 引言 python是很多人入门计算机语言的首选。 但是繁文缛节,很多人从怎么装python开始学起,然后python计算,然后什么是函数,然后什么是类,然后就因为太难放弃了。(说的是不是你&a…

openssh-server

默认地,Ubuntu桌面版不带SSH服务器 1 检查服务是否存在 ls /usr/sbin/sshd2 安装服务 apt install openssh-server3 关闭防火墙 ufw disable 4 启动服务 service ssh start

html虚拟滚动,解决dom渲染过多卡顿的问题

<!DOCTYPE html> <html lang"zh"><head><meta charset"UTF-8" /><title>极简虚拟滚动</title><style>.container {width: 300px;height: 300px;border: 1px solid #ccc;overflow: auto;position: relative;}.pl…

华锐互动:全方位定制化 VR 内容制作服务流程剖析​

华锐互动始终坚持以客户为中心&#xff0c;为客户提供全方位、定制化的 VR 内容制作服务。从项目的最初阶段开始&#xff0c;华锐互动就会深入了解客户的需求和目标&#xff0c;与客户进行充分的沟通和交流&#xff0c;挖掘项目背后的故事和文化内涵&#xff0c;然后根据客户的…

50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | DragNDrop(拖拽占用组件)

&#x1f4c5; 我们继续 50 个小项目挑战&#xff01;—— DragNDrop组件 仓库地址&#xff1a;https://github.com/SunACong/50-vue-projects 项目预览地址&#xff1a;https://50-vue-projects.vercel.app/ 使用 Vue 3 的 Composition API 和 <script setup> 语法结合…

springboot应用即使使用了连接池,MySQL数据库仍然有大量sleep状态的连接

springboot应用即使使用了连接池&#xff0c;MySQL数据库仍然有大量sleep状态的连接 问题背景概念理解MySQL配置参数wait_timeout概念Hikari配置参数&#xff08;项目使用hikari作为数据库连接池&#xff09; 实践出真知总结和解决思路 问题背景 近期客户生产环境报&#xff1…

windows下安装和使用git

本文为windows下git的下载安装和使用。 git下载和安装 参考&#xff1a; windows安装git&#xff08;全网最详细&#xff0c;保姆教程&#xff09;-CSDN博客 【学了就忘】Git介绍 — 4.Git的安装 - 简书 先解决下载时的一些疑惑&#xff1a; 选择哪个架构&#xff1f; 电脑ARM6…

借助工具给外语视频加双语字幕的实用指南​

给外语视频配上双语字幕&#xff0c;能让不同语言背景的观众更轻松理解内容&#xff0c;也能让视频在传播时更受欢迎。现在有不少智能工具能帮我们高效完成这项工作&#xff0c;比如 ViiTor AI 平台&#xff0c;它在处理双语字幕方面有不少实用功能&#xff0c;下面就结合其功能…

Claude 4 与 Gemini 2.5 Pro:开发者深度比较

Claude 4 与 Gemini 2.5 Pro&#xff1a;开发者深度比较 在使用相同的编码挑战对Claude Sonnet 4和Gemini 2.5 Pro Preview进行广泛的正面测试后&#xff0c;我发现了每个开发人员都应该了解的显著性能差异。我的发现揭示了执行速度、成本效率以及最重要的&#xff0c;精确执行…

怎么进入9870端口

在实验时想进入9870端口查看safe状态 但是输入localhost:9870后显示&#xff1a; 首先使用jps确认hadoop状态&#xff1a; 从 jps 的输出来看&#xff0c;Hadoop 的核心服务&#xff08;NameNode、DataNode、ResourceManager、NodeManager 等&#xff09;都已经正常运行&…

Windows、Linux、macOS 三大系统安装 Git 的常见坑点及解决方案,附带 具体操作示例,帮助新手快速避坑

以下是 Windows、Linux、macOS 三大系统安装 Git 的常见坑点及解决方案,附带 具体操作示例,帮助新手快速避坑。 一、Windows 系统安装 Git 1. 安装路径含空格或中文 坑点:默认路径 C:\Program Files\Git 可能导致某些脚本报错。 解决:自定义路径(如 D:\DevTools\Git)。…

OpenAI最新 GPT-4.1 、 GPT-4.1 mini 和 GPT-4.1 nano 新模型如何在ChatGPT付费创作系统平台对接API使用

GPT-4.1 ‌是 OpenAI 于2025年4月15日发布的最新语言模型系列&#xff0c;包括 GPT-4.1 、 GPT-4.1 mini 和 GPT-4.1 nano 三款新成员。这些模型在编程、指令遵循和长上下文理解方面表现出色&#xff0c;支持最大可达100万个Token的上下文窗口&#xff0c;适用于处理复杂任务和…

计算机网络(三)传输层TCP

目录 一、TCP概述​ 二、TCP三大核心特性 三、 对比UDP​​ &#xff08;1&#xff09;TCP、UDP对比 &#xff08;2&#xff09;TCP、UDP头部格式: &#xff08;3&#xff09;应用场景 ​ 四、TCP的三次握手、四次挥手 &#xff08;1&#xff09;三次握手&#xff08;建…

Spring、SpringBoot 本身为什么不提供 Bean 的异步初始化

这是一个很有深度的架构问题&#xff01;Spring/Spring Boot 本身为什么不直接提供 Bean 的异步初始化&#xff1f; 下面从原理、历史、设计哲学、技术挑战、社区现状等多个层面为你详细分析。 一、Spring Bean 初始化的默认行为 Spring IoC 容器在启动时&#xff0c;会同步地…

第十三节:Vben Admin 最新 v5.0 (vben5) + Python Flask 快速入门 - 接口操作审计日志功能

Vben5 系列文章目录 💻 基础篇 ✅ 第一节:Vben Admin 最新 v5.0 (vben5) + Python Flask 快速入门 ✅ 第二节:Vben Admin 最新 v5.0 (vben5) + Python Flask 快速入门 - Python Flask 后端开发详解(附源码) ✅ 第三节:Vben Admin 最新 v5.0 (vben5) + Python Flask 快速入…

AI掌柜失守记:AI Agent商业自动化边界实验

1. 实验设计&#xff1a;数字掌柜接管实体货架 1.1 硬件载体与虚拟人格构建 位于旧金山的实验场地被改造成微型零售生态系统&#xff1a;智能冰箱搭配商品篮构成实体货架&#xff0c;iPad自助结账系统连接Venmo支付接口&#xff0c;Slack通讯平台成为人机交互窗口。Claude So…

NAT 打洞

本文基于NAT3NAT3实现upd打洞&#xff08;假设你对NAT类型已经很清楚&#xff09; 如果A网络的NATAB网络的NATB的值大于6则打洞会失败&#xff0c;需要使用turn中继服务 STUN协议解析 #pragma once #include "hv/UdpClient.h" #include "fmt/format.h" /*…