RSA加密---前端---后端解密

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: RSA加密---前端加---后端解密

前端使用vue

RSA

准备工作

官网

jsencrypt :http://travistidwell.com/jsencrypt/

encryptlong:https://www.npmjs.com/package/encryptlong

1,安装

1.1 安装jsencrypt,执行以下命令

npm install jsencrypt

1.2 安装encryptlong,执行以下命令:

npm i  encryptlong  -S

2、开始--在导入包后在前端的工具库中直接封装RSA方法

代码

importJSEncryptfrom'jsencrypt';
/** * RSA公共加密方法-----单体版本 * @param value * @returns {string | false} * @constructor */exportfunctionRSA(value) {
constpublicKey="密钥";
constencrypt=newJSEncrypt();
encrypt.setPublicKey(publicKey);
consttest=encrypt.encrypt(value);
returntest}
/** * RSA公共加密方法-------数组+单体版本 * @param value * @returns {string | false} * @constructor */exportfunctionRSA(value) {
// RSA公钥constpublicKey="MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqAc0oxV0IW8wTjKVd/bI"+"IvI2/o9c12ACq9FceDI8t5Z0GYOL7rAoL9/v6ev6MwzFzLyLaQhAGR6qV8AFQu1s"+"mwIDAQAB";
constencryptor=newJSEncrypt();
encryptor.setPublicKey(publicKey);
// 如果传入的值是数组,则对数组中的每个元素进行加密if (Array.isArray(value)) {
constencryptedArray= [];
value.forEach((item) => {
constencryptedValue=encryptor.encrypt(item);
encryptedArray.push(encryptedValue);
    });
returnencryptedArray;
  } else {
// 如果传入的值是单个值,则直接对其进行加密constencryptedValue=encryptor.encrypt(value);
returnencryptedValue;
  }
}

在封装完成方法之后在前端的main方法中直接注入!注入后直接可在前端任意方法中调用这个共有的方法。

注入!!!!!

//自定义RSA加密
import {RSA} from "./utils/index";
Vue.prototype.RSA = RSA

3、使用实例

submit() {
constencryptedPhone=this.RSA(ts.ruleForm.phone);
constencryptedPersonNo=this.RSA(ts.ruleForm.personNo);
constencryptedPassword=this.RSA(ts.ruleForm.collectionPassword);
letapiUrl="";
letparam= {
authorizedPerson: ts.ruleForm.authorizedPerson,
personNo: encryptedPersonNo,
phone: encryptedPhone,
departmentId: ts.ruleForm.departmentId,
educationDegree: ts.ruleForm.educationDegree,
qualificationNo: ts.ruleForm.qualificationNo,
certificateValidity: ts.ruleForm.certificateValidity,
authorizationValidity: ts.ruleForm.authorizationValidity,
collectionPassword: encryptedPassword,
annexFormId: ts.ruleForm.annexFormId,
authTypes: ts.ruleForm.authTypes,
rpAuthType: ts.ruleForm.rpAuthType,
trainScore: ts.ruleForm.trainScore,
      };
if (this.addFlg==0) {
apiUrl="application/ca/add";
      } else {
apiUrl="application/ca/edit";
param.id=this.formId;
      }
this.appHttp({
url: this.appHttp.adornAppRequestUrl(apiUrl),
method: "post",
data: this.appHttp.adornData(param),
headers: {
"Content-Type": "application/json", // 添加请求头,明确指定请求体为 JSON 格式        },
      }).then(({data}) => {
if (data.code==40000) {
ts.$message({
message: data.msg,
type: "success",
          });
this.processShell.reloadPage({
flowCode: "collection.authorization",
formId: data.id,
          });
        } else {
ts.$message.error(data.msg);
        }
      });
    },

4、Java后端代码

在Java中封装解密工具类RsaUtil后直接调用就可

importjava.nio.charset.StandardCharsets;
importjava.security.KeyFactory;
importjava.security.PrivateKey;
importjava.security.spec.PKCS8EncodedKeySpec;
importjava.util.Base64;
/*** @Author 薛千凝* @Date 2023/8/16 17:24*/publicclassRsaUtil {
// 解密密码字段publicstaticStringdecryptPassword(StringcollectionPassword) {
try {
// 获取私钥字符串,这里假设私钥存在 privateKeyStr 变量中StringprivateKeyStr="密钥";
// 解码私钥字符串为字节数组byte[] privateKeyBytes=Base64.getDecoder().decode(privateKeyStr);
// 构造 PKCS8EncodedKeySpec 对象PKCS8EncodedKeySpeckeySpec=newPKCS8EncodedKeySpec(privateKeyBytes);
// 获取 RSA 密钥工厂实例KeyFactorykeyFactory=KeyFactory.getInstance("RSA");
// 生成私钥对象PrivateKeyprivateKey=keyFactory.generatePrivate(keySpec);
// 创建解密器Ciphercipher=Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.DECRYPT_MODE, privateKey);
// 解密byte[] decryptedPasswordBytes=cipher.doFinal(Base64.getDecoder().decode(collectionPassword));
// 转换为字符串StringdecryptedPassword=newString(decryptedPasswordBytes, StandardCharsets.UTF_8);
returndecryptedPassword;
        } catch (Exceptione) {
e.printStackTrace();
returnnull;
        }
    }
}
目录
相关文章
|
13天前
|
资源调度 前端开发 JavaScript
vite3+vue3 实现前端部署加密混淆 javascript-obfuscator
【11月更文挑战第10天】本文介绍了在 Vite 3 + Vue 3 项目中使用 `javascript-obfuscator` 实现前端代码加密混淆的详细步骤,包括安装依赖、创建混淆脚本、修改 `package.json` 脚本命令、构建项目并执行混淆,以及在 HTML 文件中引用混淆后的文件。通过这些步骤,可以有效提高代码的安全性。
|
2月前
|
JSON 前端开发 Java
震惊!图文并茂——Java后端如何响应不同格式的数据给前端(带源码)
文章介绍了Java后端如何使用Spring Boot框架响应不同格式的数据给前端,包括返回静态页面、数据、HTML代码片段、JSON对象、设置状态码和响应的Header。
143 1
震惊!图文并茂——Java后端如何响应不同格式的数据给前端(带源码)
|
16天前
|
前端开发 JavaScript 安全
vite3+vue3 实现前端部署加密混淆 javascript-obfuscator
【11月更文挑战第7天】本文介绍了在 Vite 3 + Vue 3 项目中使用 `javascript-obfuscator` 实现前端代码加密混淆的详细步骤。包括项目准备、安装 `javascript-obfuscator`、配置 Vite 构建以应用混淆,以及最终构建项目进行混淆。通过这些步骤,可以有效提升前端代码的安全性,防止被他人轻易分析和盗用。
|
2月前
|
前端开发 小程序 Java
java基础:map遍历使用;java使用 Patten 和Matches 进行正则匹配;后端传到前端展示图片三种情况,并保存到手机
这篇文章介绍了Java中Map的遍历方法、使用Pattern和matches进行正则表达式匹配,以及后端向前端传输图片并保存到手机的三种情况。
21 1
|
2月前
|
NoSQL Java Redis
shiro学习四:使用springboot整合shiro,正常的企业级后端开发shiro认证鉴权流程。使用redis做token的过滤。md5做密码的加密。
这篇文章介绍了如何使用Spring Boot整合Apache Shiro框架进行后端开发,包括认证和授权流程,并使用Redis存储Token以及MD5加密用户密码。
31 0
shiro学习四:使用springboot整合shiro,正常的企业级后端开发shiro认证鉴权流程。使用redis做token的过滤。md5做密码的加密。
|
2月前
|
算法 安全 Go
RSA加密算法详解与Python和Go实现
RSA加密算法详解与Python和Go实现
105 1
|
2月前
|
算法 安全 网络安全
使用 Python 实现 RSA 加密
使用 Python 实现 RSA 加密
63 2
|
2月前
|
存储 前端开发 Java
验证码案例 —— Kaptcha 插件介绍 后端生成验证码,前端展示并进行session验证(带完整前后端源码)
本文介绍了使用Kaptcha插件在SpringBoot项目中实现验证码的生成和验证,包括后端生成验证码、前端展示以及通过session进行验证码校验的完整前后端代码和配置过程。
152 0
验证码案例 —— Kaptcha 插件介绍 后端生成验证码,前端展示并进行session验证(带完整前后端源码)
|
2月前
|
JSON 前端开发 数据格式
@RequestMapping运用举例(有源码) 前后端如何传递参数?后端如何接收前端传过来的参数,传递单个参数,多个参数,对象,数组/集合(有源码)
文章详细讲解了在SpringMVC中如何使用`@RequestMapping`进行路由映射,并介绍了前后端参数传递的多种方式,包括传递单个参数、多个参数、对象、数组、集合以及JSON数据,并且涵盖了参数重命名和从URL中获取参数的方法。
103 0
@RequestMapping运用举例(有源码) 前后端如何传递参数?后端如何接收前端传过来的参数,传递单个参数,多个参数,对象,数组/集合(有源码)
|
2月前
|
前端开发 JavaScript Java
导出excel的两个方式:前端vue+XLSX 导出excel,vue+后端POI 导出excel,并进行分析、比较
这篇文章介绍了使用前端Vue框架结合XLSX库和后端结合Apache POI库导出Excel文件的两种方法,并对比分析了它们的优缺点。
302 0
下一篇
无影云桌面