React + Express 傳輸加密以及不可逆加密

一、傳輸加密

這里用 對稱加密模式 ASE實現。

React 前端


const CryptoJS = require("crypto-js");// 示例1:ECB模式(無需IV)
const encryptECB = (plainText, key) => {return CryptoJS.AES.encrypt(plainText, key, {mode: CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7}).toString();
};const decryptECB = (cipherText, key) => {const bytes = CryptoJS.AES.decrypt(cipherText, key, {mode: CryptoJS.mode.ECB});return bytes.toString(CryptoJS.enc.Utf8);
};// 示例2:CBC模式(需要IV)
const encryptCBC = (plainText, key, iv) => {return CryptoJS.AES.encrypt(plainText, key, {iv: CryptoJS.enc.Utf8.parse(iv),mode: CryptoJS.mode.CBC,padding: CryptoJS.pad.Pkcs7}).toString();
};const decryptCBC = (cipherText, key, iv) => {const bytes = CryptoJS.AES.decrypt(cipherText, key, {iv: CryptoJS.enc.Utf8.parse(iv)});return bytes.toString(CryptoJS.enc.Utf8);
};// 測試用例
const key = "my-secret-key-123"; // 16/24/32字節
const iv = "1234567890123456";   // 16字節
const text = "Hello AES!";// ECB模式
const ecbEncrypted = encryptECB(text, key);
console.log("ECB加密結果:", ecbEncrypted);
console.log("ECB解密結果:", decryptECB(ecbEncrypted, key));// CBC模式
const cbcEncrypted = encryptCBC(text, key, iv);
console.log("CBC加密結果:", cbcEncrypted);
console.log("CBC解密結果:", decryptCBC(cbcEncrypted, key, iv));

Express 中間件

?解密中間件封裝

創建?AES_decrypt.js?中間件文件,處理請求體的加密數據:

const { AES_decrypt } = require('../utils/AES');
const decryptMiddleware = (req, res, next) => {if (req.body?.content && req.body?.iv) {try {const decrypted = AES_decrypt(req.body.content, req.body.iv);req.decryptedData = JSON.parse(decrypted); // 存儲解密結果到請求對象next();} catch (err) {res.status(400).json({ error: "解密失敗" });}} else {next(); // 非加密請求跳過}
};
module.exports = decryptMiddleware;

?引用自實際中間件解密實現?

在?utils/AES.js?中定義解密函數,需與前端 CryptoJS 的 CBC 模式配置一致:

const crypto = require('crypto');
const secretKey = '1234567890123456'; // 16字節密鑰function AES_decrypt(encryptedText, ivHex) {const decipher = crypto.createDecipheriv('aes-128-cbc',Buffer.from(secretKey),Buffer.from(ivHex, 'hex'));let decrypted = decipher.update(encryptedText, 'base64', 'utf8');decrypted += decipher.final('utf8');return decrypted;
}
module.exports = { AES_decrypt };

下面是ECB(無vi模式)


const crypto = require('crypto');
const secretKey = process.env.AES_KEY || 'default16byteskey!'; // 16字節密鑰module.exports = (req, res, next) => {if (req.body?.encryptedData) {try {const decipher = crypto.createDecipheriv('aes-128-ecb', Buffer.from(secretKey),null // ECB模式無需IV);let decrypted = decipher.update(req.body.encryptedData, 'base64', 'utf8');decrypted += decipher.final('utf8');req.decryptedBody = JSON.parse(decrypted);next();} catch (err) {res.status(400).json({ error: "ECB解密失敗", details: err.message });}} else {next(); // 非加密請求跳過}
};

二、不可逆加密

這里用bcryptjs實現

import bcrypt from 'bcryptjs';/*** 加密(不可逆轉加密)* @param rawData */
export const getHashedData = (rawData: string): string => {const salt = bcrypt.genSaltSync(10); // 成本因子推薦10-12const hashedData = bcrypt.hashSync(rawData, salt); return hashedData;
}/*** 匹配不可逆轉加密方式生成的數據* @param rawData * @param hashedData * @returns */
export const matchHashDataAndRawData = (rawData: string, hashedData: string): boolean => {return bcrypt.compareSync(rawData, hashedData);
} 

調用

加密

 const hashedPassword = getHashedData(password);

比對數據?

matchHashDataAndRawData(newPassword, password);

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/87951.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/87951.shtml
英文地址,請注明出處:http://en.pswp.cn/web/87951.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

瀏覽器(Chrome /Edge)高效使用 - 內部命令/快捷鍵/啟動參數

今天在CSDN上傳文件,提交總是提示續傳失敗,重試了五六次才想到獲取是科學上網的問題,這個時候其實只要重啟瀏覽器即可,但如果手動關閉瀏覽器再次打開,瀏覽器不會恢復之前的多開窗口(會恢復最后一個窗口內多開的標簽頁,但不會恢復其他窗口)。想了想記得 Chrome 流行的時…

【PTA數據結構 | C語言版】連續子序列最大和

本專欄持續輸出數據結構題目集,歡迎訂閱。 文章目錄 題目代碼 題目 給定 n 個整數組成的序列 { a1 ,a2 ,?,an },“連續子序列”被定義為 { ai ,ai1 ,?,aj },其中 1≤i≤j≤n。“連續子序列最大和”則被定義為所有連續子序列元素的和中最大…

Vrrp配置和原理

Vrrp配置和原理 文章目錄Vrrp配置和原理概述物理與邏輯拓撲重點vrid虛擬路由器虛擬IP地址及虛擬MAC地址超時時間計算-MASTER_DOWNvip 管理員手動指定方法Master路由器Backup路由器PriorityVRRP報文格式VRRP狀態機從Backup到masterVRRP協議狀態二.優先級一樣比較接口IPVRRP優先級…

可編輯59頁PPT | 某大型集團人工智能數字化轉型SAP解決方案

薦言摘要:某大型集團人工智能數字化轉型中,SAP解決方案扮演著智能中樞角色,深度融合AI技術與核心業務場景,破解傳統系統“數據孤島流程僵化”雙重困局。針對集團跨產業、多業態特點,方案以SAP S/4HANA為數據底座&#…

【RK3568 驅動開發:實現一個最基礎的網絡設備】

RK3568 驅動開發:實現一個最基礎的網絡設備一、引言二、編寫網絡設備驅動代碼1. 核心數據結構與接口2. 核心功能實現3. 網絡命名空間管理4.源代碼三、編譯與驗證1.加載模塊2.驗證網絡四、注意事項一、引言 RK3568 作為一款高性能 ARM 架構處理器,廣泛應…

CAIDCP系列對話:AI 驅動安全

數字時代,AI浪潮翻涌,網絡安全攻防戰已悄然升級: 某工業控制系統遭AI驅動勒索攻擊:攻擊者借 AI 精準捕捉異常網絡掃描、遠程 PowerShell 痕跡,瞬間加密文件索要贖金; 另一邊,某大型科技公司用AI…

ARMv8 沒開mmu執行memset引起的非對齊訪問異常

最近在haps上驗證一個新的芯片,記錄一下memset訪問出錯的問題。在沒開mmu和cache的情況下,對全局變量指針進行memset清零操作,發現每次都會出現異常。最后發現是沒開mmu導致出現了數據非對齊訪問導致報錯。排查EC區域發現是0x25,產…

基于LiveKit Go 實現騰訊云實時音視頻功能

詳細的生產部署建議,適用于 LiveKit Go 服務器 Web 客戶端 TURN/HTTPS。 1. 服務器準備 推薦使用云服務器(如阿里云、騰訊云、AWS、Azure等),公網IP,帶寬建議≥10Mbps。系統推薦 Ubuntu 20.04/22.04 或 CentOS 7/8&…

三位一體:Ovis-U1如何以30億參數重構多模態AI格局?

1. 時代命題:多模態統一模型的破局之戰當GPT-4o以萬億級參數構建多模態帝國時,中國AI軍團正在書寫另一種答案。Ovis-U1用30億參數證明:參數量并非決定性因素,架構創新與訓練策略的化學反應,同樣能催生出改變游戲規則的…

圖像處理基礎:鏡像、縮放與矯正

在圖像處理中,鏡像、縮放和矯正操作是常見的圖像變換手段。這些操作可以幫助我們對圖像進行調整,以滿足不同的需求。本文將詳細介紹這三種操作的原理和實現方法,并通過代碼示例展示它們的實際應用。一、圖片鏡像旋轉1.1 什么是鏡像旋轉&#…

「Java案例」猜數游戲

案例實現 猜數字游戲 設計一個三位數的猜數游戲,三位數隨機生成。程序提示用戶輸入一個三位的數字,依照以下的規則決定贏取多少獎金:1) 如果用戶輸入的數字和隨機數字完全一致,輸出:“恭喜恭喜!完全猜對了!獲得三個贊!”2) 如果用戶輸入的數字覆蓋了隨機生成的所有數…

創客匠人解析創始人 IP 內卷:知識變現時代的生存邏輯與破局路徑

當知識付費行業進入 “存量競爭” 階段,創始人 IP 的 “內卷” 已非選擇而是必然。創客匠人在服務數萬知識創業者的實踐中發現,那些實現逆勢增長的案例,其核心差異往往在于創始人是否具備 “從幕后走到臺前” 的決心與能力 —— 這種內卷并非…

250705-Debian12-sudo apt update加速+配置RDP遠程桌面環境+設置FRP服務為開機啟動項

A. 實現sudo apt update加速 在 Debian 12 上運行 sudo apt update 很慢的常見原因包括: 🔍 一、常見原因分析 使用了國外的軟件源 默認 Debian 安裝源多數是國際服務器,國內訪問會非常慢。 DNS 解析慢或失敗 軟件源地址解析時間長&#xf…

數學視頻動畫引擎Python庫 -- Manim Voiceover 語音服務 Speech Services

文中內容僅限技術學習與代碼實踐參考,市場存在不確定性,技術分析需謹慎驗證,不構成任何投資建議。 Manim Voiceover 是一個為 Manim 打造的專注于語音旁白的插件: 直接在 Python 中添加語音旁白: 無需使用視頻編輯器&…

C++11 forward_list 從基礎到精通:原理、實踐與性能優化

文章目錄一、為什么需要 forward_list?二、基礎篇:forward_list 的核心特性與接口2.1 數據結構與迭代器2.2 常用接口速覽2.3 基礎操作示例:從初始化到遍歷2.3.1 初始化與遍歷2.3.2 插入與刪除:before_begin 的關鍵作用三、進階篇&…

物聯網技術的核心組件與發展趨勢(截至2025年)

一、物聯網技術的核心組件物聯網(IoT)技術體系由感知層、網絡層、平臺層、應用層和安全層構成,各層技術協同工作,實現物理世界與數字世界的深度融合。1. 感知層:數據采集與交互傳感器技術:類型:…

面試中常見的問題:JavaScript 宏任務與微任務,包教包會

事件循環Event Loop 我們都知道,JavaScript 是一種單線程的編程語言,簡單的說就是:js只有一條通道,那么在任務多的情況下,就會出現擁擠的情況,這種情況下就產生了 ‘多線程’ ,但是這種“多線程…

【LeetCode102.二叉樹的層序遍歷】vs.【LeetCode103.二叉樹的鋸齒形層序遍歷】

題目鏈接 LeetCode102.二叉樹的層序遍歷:102. 二叉樹的層序遍歷 - 力扣(LeetCode)LeetCode103.二叉樹的鋸齒形層序遍歷:103. 二叉樹的鋸齒形層序遍歷 - 力扣(LeetCode) 實現思路 定義一個隊列&#xff0…

Redis On-CPU Profiling定位瓶頸到可視化火焰圖

1 . 前置檢查:確認 CPU 真的是瓶頸 在正式打性能“補丁”前,務必跑一遍系統級健康核對表(推薦 Brendan Greg 的 USE Method):資源關注指標常用工具CPUUtil/Idle、RunQueuetop、vmstat、sar內存Fault、Swap、Cache Miss…

未來趨勢:AI與量子計算對服務器安全的影響

隨著技術的飛速發展,人工智能(AI)和量子計算正在深刻改變信息技術的各個領域。特別是在服務器安全領域,這兩項技術既帶來了新的可能性,也帶來了前所未有的挑戰。本文將探討AI和量子計算技術對服務器安全的影響&#xf…