使用RSA對網址url欄加密以及二維碼的網址內容加密

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" /*…