加密解密記錄

一、RSA 加密解密

密鑰對生成

1.前端加密解密

(1).vue頁面引入

npm install jsencrypt

(2)工具 jsencrypt.js

import JSEncrypt from 'jsencrypt/bin/jsencrypt.min'// 密鑰對生成 http://web.chacuo.net/netrsakeypairconst publicKey = 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzkg89iPFXYTyMpUXax1l DUB5bX0b44S5tGUqyCQ0mjG+8bM0pM0Qab1st2zH86PMnq9tybARciaJYE5zGK8X cFsMRznYnhUpizLlr1omr/KMALYpsGO35XSd/re0AidyJXf9TVLdAWalFyoFWQUS 9pbsnsZX+317NvNw5YfVPRpmeVi6zbUZGOS2oKFTX6rePVJ5QFPaYGKPjiO/BEza turBCGxtJr9sC51TZFzrdPto4BjqXkn1xiyIxMzbFwqmU6IrqfYuhIBoRWeIPD2S +z4Z6FyETQGWsfposqg8cs1noVyGqcISt8rzpCRg3gGfCacoHpAbspPAw6/AF0wO LQIDAQAB'
const privateKey = 'MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDOSDz2I8VdhPIy lRdrHWUNQHltfRvjhLm0ZSrIJDSaMb7xszSkzRBpvWy3bMfzo8yer23JsBFyJolg TnMYrxdwWwxHOdieFSmLMuWvWiav8owAtimwY7fldJ3+t7QCJ3Ild/1NUt0BZqUX KgVZBRL2luyexlf7fXs283Dlh9U9GmZ5WLrNtRkY5LagoVNfqt49UnlAU9pgYo+O I78ETNq26sEIbG0mv2wLnVNkXOt0+2jgGOpeSfXGLIjEzNsXCqZToiup9i6EgGhF Z4g8PZL7PhnoXIRNAZax+miyqDxyzWehXIapwhK3yvOkJGDeAZ8JpygekBuyk8DD r8AXTA4tAgMBAAECggEAdxw7Jx1Mj01+1DpGhXE5skcyVkhRXDR9Tm7EH0DYpthm mwWRNj+6ZHQeXGORqVtBgbdmO3lQ+YrK9DMYPn6LmDLaih4auF0b2eaPvYren+X7 dUW6GMHbo8CMolHMvRmtzXjVaFqahn6QgSmgYOCPLJfFFYENuIeiJ/61h7PBK0AT Cfkrg7BNf/X23u26siTcRboyf3fESJq4V/XRtH7pEDTNX7V9nssbFXGxNXA4UZts lzbGZh0vYKF0wuy1Wfwp4RpdR0JK852l6CWT3VBL4na+kB9E5Q1RjttVRaAYtWTF maCwdDeY7VeOnSJorG0r8yw1VINgDxJ9HTB3LrPpwQKBgQD4p9ve6TzoU747ueDU w8Rx7q/1A+YfTU8lu5CW75tuTCzH/g69g2BTZlGu2PDGevv2qdf9IJtKvbR3Czby 90rNFK0BVumccDc1qufm6gi+QyfZjONx+27SCN7+F/OHqkZe7TSZA49zbXYUwRTS K5TfzFvQqdDF5b8Qe3scBv7pdQKBgQDUX/vQWHn36l/zG93Njppot77qFANOUX8G K4GK+BK07g0SWf9RvQvf21ejr0Dq/QfAjzsVm7fbvfsmwuzA6NkjEfuFlh6zBnfB 5oba5gUW1bMfxXe2MOyTaRBZGocKVimTc1h5IwLXG8kGhmacP5H3IRjKVXmVnimP hzseg+hC2QKBgQCzsZLaX5GNj989CFIrUCJp94UfOqcV3eehrA+MlDGuHsyJ5ta+ K+/ztVC4W7x8oyntEsas/eBbvgZptSgLo5xh4lw4SJfgXtP3K8AVBvI0lRF6TS+d Eof+rzx/Qc3TL8FVHnTRU1panzMjQnmKfMZEiUmc3Our6CEQhzvrgD69dQKBgAOJ EYUXY/hnk29VoGyimhlyLaBx8tgj7SxqHv70QEN4zwjmLKTss7znRt83tKn0ymM/ PymN7RKgaATuK8jOV4cI7pn7tMkgK3Az6TzNpXoK1q+JtwN2bwnJLvd8xJC8fHay 7d8eYRa5pLASHrUtLb3idCoyIBMIjgKQqsBIS96JAoGBAO/pzcrHxpmcOuHlmFbG 0RvFDgPsxKIaExfFPCJNaWbKreqCJlzd5jZ8RvDfI2Md1bhFICOezCkVWkrZFXkN l0JrwbEFnuuMghKBT5HYrRzt90mJXU0BWRwYA+H21uzBXcWfw2e+5mA+RZFGQu7I WpNCkdMST22/aGMBSjcBC3pP'// 加密
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) // 對數據進行解密
}

(3)使用

import {encrypt, decrypt} from '@/utils/jsencrypt'
methods: {cl(){let encrypt=encrypt(this.loginForm.password);let decrypt=decrypt(encrypt);}
}

4.后端解密

<!-- https://mvnrepository.com/artifact/org.bouncycastle/bcpkix-jdk15on -->
<dependency><groupId>org.bouncycastle</groupId><artifactId>bcpkix-jdk15on</artifactId><version>1.70</version>
</dependency>

(1)工具類

package com.ruoyi.common.utils;import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import java.nio.charset.StandardCharsets;
import java.security.*;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.Base64;public class RsaUtil {/*** 加密算法*/private static final String ALGORITHM = "RSA";private static final String publicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzkg89iPFXYTyMpUXax1l DUB5bX0b44S5tGUqyCQ0mjG+8bM0pM0Qab1st2zH86PMnq9tybARciaJYE5zGK8X cFsMRznYnhUpizLlr1omr/KMALYpsGO35XSd/re0AidyJXf9TVLdAWalFyoFWQUS 9pbsnsZX+317NvNw5YfVPRpmeVi6zbUZGOS2oKFTX6rePVJ5QFPaYGKPjiO/BEza turBCGxtJr9sC51TZFzrdPto4BjqXkn1xiyIxMzbFwqmU6IrqfYuhIBoRWeIPD2S +z4Z6FyETQGWsfposqg8cs1noVyGqcISt8rzpCRg3gGfCacoHpAbspPAw6/AF0wO LQIDAQAB";private static final String privateKey = "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDOSDz2I8VdhPIy lRdrHWUNQHltfRvjhLm0ZSrIJDSaMb7xszSkzRBpvWy3bMfzo8yer23JsBFyJolg TnMYrxdwWwxHOdieFSmLMuWvWiav8owAtimwY7fldJ3+t7QCJ3Ild/1NUt0BZqUX KgVZBRL2luyexlf7fXs283Dlh9U9GmZ5WLrNtRkY5LagoVNfqt49UnlAU9pgYo+O I78ETNq26sEIbG0mv2wLnVNkXOt0+2jgGOpeSfXGLIjEzNsXCqZToiup9i6EgGhF Z4g8PZL7PhnoXIRNAZax+miyqDxyzWehXIapwhK3yvOkJGDeAZ8JpygekBuyk8DD r8AXTA4tAgMBAAECggEAdxw7Jx1Mj01+1DpGhXE5skcyVkhRXDR9Tm7EH0DYpthm mwWRNj+6ZHQeXGORqVtBgbdmO3lQ+YrK9DMYPn6LmDLaih4auF0b2eaPvYren+X7 dUW6GMHbo8CMolHMvRmtzXjVaFqahn6QgSmgYOCPLJfFFYENuIeiJ/61h7PBK0AT Cfkrg7BNf/X23u26siTcRboyf3fESJq4V/XRtH7pEDTNX7V9nssbFXGxNXA4UZts lzbGZh0vYKF0wuy1Wfwp4RpdR0JK852l6CWT3VBL4na+kB9E5Q1RjttVRaAYtWTF maCwdDeY7VeOnSJorG0r8yw1VINgDxJ9HTB3LrPpwQKBgQD4p9ve6TzoU747ueDU w8Rx7q/1A+YfTU8lu5CW75tuTCzH/g69g2BTZlGu2PDGevv2qdf9IJtKvbR3Czby 90rNFK0BVumccDc1qufm6gi+QyfZjONx+27SCN7+F/OHqkZe7TSZA49zbXYUwRTS K5TfzFvQqdDF5b8Qe3scBv7pdQKBgQDUX/vQWHn36l/zG93Njppot77qFANOUX8G K4GK+BK07g0SWf9RvQvf21ejr0Dq/QfAjzsVm7fbvfsmwuzA6NkjEfuFlh6zBnfB 5oba5gUW1bMfxXe2MOyTaRBZGocKVimTc1h5IwLXG8kGhmacP5H3IRjKVXmVnimP hzseg+hC2QKBgQCzsZLaX5GNj989CFIrUCJp94UfOqcV3eehrA+MlDGuHsyJ5ta+ K+/ztVC4W7x8oyntEsas/eBbvgZptSgLo5xh4lw4SJfgXtP3K8AVBvI0lRF6TS+d Eof+rzx/Qc3TL8FVHnTRU1panzMjQnmKfMZEiUmc3Our6CEQhzvrgD69dQKBgAOJ EYUXY/hnk29VoGyimhlyLaBx8tgj7SxqHv70QEN4zwjmLKTss7znRt83tKn0ymM/ PymN7RKgaATuK8jOV4cI7pn7tMkgK3Az6TzNpXoK1q+JtwN2bwnJLvd8xJC8fHay 7d8eYRa5pLASHrUtLb3idCoyIBMIjgKQqsBIS96JAoGBAO/pzcrHxpmcOuHlmFbG 0RvFDgPsxKIaExfFPCJNaWbKreqCJlzd5jZ8RvDfI2Md1bhFICOezCkVWkrZFXkN l0JrwbEFnuuMghKBT5HYrRzt90mJXU0BWRwYA+H21uzBXcWfw2e+5mA+RZFGQu7I WpNCkdMST22/aGMBSjcBC3pP";public static void main(String[] args) throws Exception {String original = "你好呀!";String encrypted = encrypt(original);System.out.println("加密結果: " + encrypted);String decrypted = decrypt(encrypted);System.out.println("解密結果: " + decrypted);}/*** 加密* @param content* @return*/public static String encrypt(String content) {if (StringUtils.isEmpty(content))return content;//處理公鑰String publicKeyPEM = publicKey.replace("-----BEGIN PUBLIC KEY-----", "").replace("-----END PUBLIC KEY-----", "").replaceAll("\\s", "");byte[] publicBytes = Base64.getDecoder().decode(publicKeyPEM);X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(publicBytes);try {KeyFactory rsaInstance = KeyFactory.getInstance(ALGORITHM);PublicKey publicKey = rsaInstance.generatePublic(x509EncodedKeySpec);Cipher cipher = Cipher.getInstance(ALGORITHM);cipher.init(Cipher.ENCRYPT_MODE, publicKey);byte[] bytes = cipher.doFinal(content.getBytes(StandardCharsets.UTF_8));return Base64.getEncoder().encodeToString(bytes);} catch (Exception ex) {ex.printStackTrace();}return null;}/*** 解密* @param encryptedBase64* @return* @throws Exception*/public static String decrypt(String encryptedBase64) {if (StringUtils.isEmpty(encryptedBase64))return encryptedBase64;try {//處理私鑰(將私鑰轉換為PKCS8格式)String privateKeyPEM = privateKey.replace("-----BEGIN PRIVATE KEY-----", "").replace("-----END PRIVATE KEY-----", "").replaceAll("\\s", "");byte[] keyBytes = Base64.getDecoder().decode(privateKeyPEM);PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes);KeyFactory keyFactory = KeyFactory.getInstance(ALGORITHM);PrivateKey privateKey = keyFactory.generatePrivate(keySpec);// 使用私鑰進行解密Cipher cipher = Cipher.getInstance(ALGORITHM);cipher.init(Cipher.DECRYPT_MODE, privateKey);byte[] decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(encryptedBase64));return new String(decryptedBytes);} catch (NoSuchAlgorithmException e) {throw new RuntimeException(e);} catch (InvalidKeySpecException e) {throw new RuntimeException(e);} catch (NoSuchPaddingException e) {throw new RuntimeException(e);} catch (InvalidKeyException e) {throw new RuntimeException(e);} catch (IllegalBlockSizeException e) {throw new RuntimeException(e);} catch (BadPaddingException e) {throw new RuntimeException(e);}}
}

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

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

相關文章

淺析 MegEngine 對 DTR 的實現與改進

分享筆者在學習 MegEngine 對 DTR 的實現時的筆記。關于 DTR 可以參考&#xff1a;【翻譯】DTR_ICLR 2021 文章目錄 MegEngine 架構設計MegEngine 的動態圖部分Imperative RuntimeImperative 與 MegDNN / MegBrain 的關系靜態圖運行時管家 —— MegBrain動態圖接口 —— Impera…

micro-app前端微服務原理解析

一、核心設計思想 基于 WebComponents 的組件化渲染 micro-app 借鑒 WebComponents 的 CustomElement 和 ShadowDom 特性&#xff0c;將子應用封裝為類似 WebComponent 的自定義標簽&#xff08;如 <micro-app>&#xff09;。通過 ShadowDom 的天然隔離機制&#xff0c;實…

CMake中強制啟用option定義變量的方法

在CMake中&#xff0c;若要在另一個CMake文件中強制啟用由option()定義的變量&#xff0c;可使用set(... FORCE)覆蓋緩存變量。具體步驟如下&#xff1a; 使用set命令強制覆蓋緩存&#xff1a; 在需要強制啟用選項的CMake文件中&#xff0c;使用set命令并指定CACHE和FORCE參數。…

C++漫溯鍵值的長河:map set

文章目錄 1.關聯式容器2.set2.1 find2.2 lower_bound、upper_bound 3.multiset3.1 count3.2 equal_range 4.map4.1 insert4.2 operate->4.3 operate[ ]4.4 map的應用實踐&#xff1a;隨機鏈表的復制 5.multimap希望讀者們多多三連支持小編會繼續更新你們的鼓勵就是我前進的動…

汽車用品商城小程序源碼介紹

基于ThinkPHPFastAdminUniApp開發的汽車用品商城小程序源碼&#xff0c;從技術架構來看&#xff0c;ThinkPHP作為后端框架&#xff0c;提供了穩定且高效的開發基礎&#xff0c;能夠處理復雜的業務邏輯和數據交互。FastAdmin則進一步簡化了后臺管理系統的開發流程&#xff0c;提…

力扣hot100——114.二叉樹展開為鏈表

基于 Morris 遍歷思想 將左子樹插到右子樹的位置&#xff0c;將原來的右子樹插到左子樹的最右結點&#xff0c;遍歷右結點重復以上步驟&#xff0c;直至右結點為空。 class Solution { public:void flatten(TreeNode* root) {if(rootnullptr) return;while(root){if(!root-&g…

JConsole監控centos服務器中的springboot的服務

場景 在centos服務器中,有一個aa.jar的springboot服務,我想用JConsole監控它的JVM情況,具體怎么實現。 配置 Spring Boot 應用以啟用 JMX 在java應用啟動項進行配置 java -Djava.rmi.server.hostname=服務器IP -Dcom.sun.management.jmxremote=true \ -Dcom.sun.managem…

39.RocketMQ高性能核心原理與源碼架構剖析

1. 源碼環境搭建 1.1 主要功能模塊 ? RocketMQ的官方Git倉庫地址&#xff1a;GitHub - apache/rocketmq: Apache RocketMQ is a cloud native messaging and streaming platform, making it simple to build event-driven applications. ? RocketMQ的官方網站上下載指定版…

施磊老師rpc(一)

文章目錄 mprpc項目**項目概述**&#xff1a;深入學習到什么**前置學習建議**&#xff1a;核心內容其他技術與工具**項目特點與要求**&#xff1a;**環境準備**&#xff1a; 技術棧集群和分布式理論單機聊天服務器案例分析集群聊天服務器分析分布式系統介紹多個模塊的局限引入分…

基于LangChain構建最小智能體(Agent)實現指南

摘要 本文完整解析基于LangChain的極簡Agent實現方案&#xff0c;通過26行代碼構建具備網絡搜索能力的對話系統&#xff0c;涵蓋Agent初始化、工具集成、流式回調等核心技術要點。適用于LLM應用開發者快速入門Agent開發。(參考項目代碼&#xff1a;Minimal Agent) 系統架構設計…

AWTK:一鍵切換皮膚,打造個性化UI

想讓你的應用在不同場景下都能完美呈現嗎&#xff1f;皮膚切換功能必不可少&#xff01;本文將介紹AWTK&#xff0c;一款強大的GUI框架&#xff0c;它通過內置資源管理和優化緩存&#xff0c;輕松實現皮膚切換功能。 前言 當今的UI應用中&#xff0c;為了滿足不同使用場景和…

【Vagrant+VirtualBox創建自動化虛擬環境】Ansible測試Playbook

文章目錄 Vagrant安裝vagrant安裝 VirtualBox如何使用 Ansible安裝AnsiblePlaybook測試創建hosts文件創建setup.yml文件 Vagrant Vagrant是一個基于Ruby的工具&#xff0c;用于創建和部署虛擬化開發環境。它使用Oracle的開源VirtualBox虛擬化系統&#xff0c;使用 Chef創建自動…

AI在醫療領域的10大應用:從疾病預測到手術機器人

AI在醫療領域的10大應用&#xff1a;從疾病預測到手術機器人 系統化學習人工智能網站&#xff08;收藏&#xff09;&#xff1a;https://www.captainbed.cn/flu 文章目錄 AI在醫療領域的10大應用&#xff1a;從疾病預測到手術機器人摘要引言1. 醫學影像診斷&#xff1a;從靜態…

Win11 配置 Git 綁定 Github 賬號的方法與問題匯總

目錄 一、創建 Github 項目庫&#xff08;遠程倉庫&#xff09;二、配置安裝好的 Git1. 設置用戶信息2. 查看已配置的信息3. 建立本地倉庫4. Git 的常用命令1&#xff09;git checkout&#xff08;切換&#xff09;2&#xff09;git push&#xff08;上傳&#xff09;3&#xf…

6.應用層

6. 應用層 1. 概述 應用層是計算機網絡體系結構的最頂層&#xff0c;是設計和建立計算機網絡的最終目的&#xff0c;也是計算機網絡中發展最快的部分 早期基于文本的應用&#xff08;電子郵件、遠程登錄、文件傳輸、新聞組&#xff09;20世紀90年代將因特網帶入千家萬戶的萬維…

FPGA 100G UDP純邏輯協議棧

隨著器件等級的升高&#xff0c;高速serdes的線速率也隨之提高&#xff0c;RFSOC 4x最大可支持100G&#xff0c;主流方案為RDMA方案&#xff0c;該方案相對比較復雜&#xff0c;除了需要負責邏輯端的開發&#xff0c;還需操作系統中開發RDMA的驅動&#xff0c;對于對丟包不那么…

CSS實現DIV水平與垂直居中方法總結

大家好&#xff0c;歡迎來到程序視點&#xff01;我是你們的老朋友.小二&#xff01; CSS實現DIV水平與垂直居中方法總結 一、水平居中方案 標準方法 .center-div {margin-left: auto;margin-right: auto; }關鍵點&#xff1a;必須聲明DOCTYPE&#xff08;推薦XHTML 1.0 Tran…

Qt快速上手:QSettings高效配置讀寫實戰指南

文章目錄 前言一、QSettings初識&#xff1a;配置管理利器二、基礎操作三板斧2.1 文件讀寫基礎2.2 數據類型處理指南2.3 分組管理技巧 三、高級技巧&#xff1a;精準控制配置項3.1 監聽配置變更3.2 批量操作配置項 四、避坑指南&#xff1a;那些你可能會遇到的問題4.1 鍵順序重…

2025運維工程師面試題1(答案在后一張)

一、邏輯思維能力考核&#xff1a; 問題1&#xff1a; 3個人去投宿&#xff0c;一晚30元三個人每人掏了10元湊夠30元交給了老板后來老板說今天優惠只要25元就夠了&#xff0c;拿出5元命令服務生退還給他們&#xff0c;服務生偷偷藏起了2元&#xff0c;然后&#xff0c;把剩下…

react中封裝一個預覽.doc和.docx文件的組件

主要用到了mammoth這個插件,mammoth.js?是一個JavaScript庫&#xff0c;主要用于將Microsoft Word文檔&#xff08;.docx格式&#xff09;轉換為HTML。它可以通過Node.js環境使用&#xff0c;也可以直接在瀏覽器中使用。 關鍵代碼: import mammoth from mammoth; import { u…