当前位置: 首页 > news >正文

加密解密记录

一、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);}}
}

相关文章:

  • 【笔记】深度学习模型训练的 GPU 内存优化之旅⑤:内存分配篇
  • 电子秤检测管理系统开发实战:从数据采集到可视化大屏
  • 从0开始的c++知识讲解之字符串(1)
  • 体系学习1:C语言与指针1——预定义、进制打印、传参为数组
  • 【dify—7】文本生成应用实战——学员周报生成
  • 多模态大语言模型arxiv论文略读(五十二)
  • LabVIEW异步调用VI介绍
  • 【软件设计师:复习】上午题核心知识点总结(一)
  • FPGA中级项目8———UART-RAM-TFT
  • 数据结构——树(中篇)
  • Python控制语句全解析:用法、案例与注意事项
  • Redis实现分布式锁
  • 2025五一杯A题五一杯数学建模思路代码文章教学:支路车流量推测问题
  • python类私有变量
  • 【2025最新面经】暑期实习常问知识点
  • 简单句练习--语法基础
  • Python Cookbook-6.12 检查一个实例的状态变化
  • C++11新的特性
  • ZYNQB笔记(十六):AXI DMA 环路测试
  • 开发板型号 ESP32-DevKitC-32模块型号 ESP32-WROOM-32 和主控芯片 ESP32-D0WDQ6-V3
  • 菏泽家长“付费查成绩”风波调查:免费功能被误读
  • 国新办发布《关于新冠疫情防控与病毒溯源的中方行动和立场》白皮书
  • “光荣之城”2025上海红色文化季启动,红色主题市集亮相
  • 外交部:美方应在平等、尊重和互惠的基础上同中方开展对话
  • 中国体育报关注徐梦桃、王曼昱、盛李豪等获评全国先进工作者:为建设体育强国再立新功
  • 法治日报调查直播间“杀熟”乱象:熟客越买越贵,举证难维权不易