结合RSA与AES实现前后端加密通信

一、思路

使用RSA秘钥生成工具生成一对公钥(A)和私钥(B),前端保留A,后端保留B。

前端发送数据时,先生成一串随机16位字符串作为AES的秘钥(C),然后使用A使用RSA算法对C进行加密,得到加密后的AES秘钥(D)。将要发送的数据(E)用C使用AES加密,得到密文(F)。将D和F一同发给后端进行处理。

后端处理数据时,先用B对D使用RSA进行解密得到C,用C对F使用AES进行解密得到E,处理后得到结果G,再用C对G进行AES加密得到H,将H返回给前端。

前端接收到H后用C进行解密,得到处理的结果G。

因为对数据进行加密的AES秘钥是每次请求随机生成的,而且传输过程中AES是使用非对称加密的,只要后端持有的RSA私钥不泄露即可保证数据通信安全。




二、前端组件的使用

1、引入插件

① 引入AES对称加密插件

npm i --save crypto-js

② 引入RSA非对称插件

npm i --save jsencrypt

2、新建encrypt.js 页面进行封装 及使用

Encrypt.js封装导出内容如图:


使用

AES加密

使用 Encrypt()方法进行加密,传入两个参数:encrypted和key,key是随机生成的16位字符串,encrypted为需要加密的内容,最后return出加密结果


AES解密

使用Decrypt()方法进行解密,传参:data和key,key为随机生成的16位字符串(同加密时的key一致),data为后端返回AES加密字段,return解密string类型结果



RSA加密

encryptRsa()方法进行加密,根据后端提供公钥与随机生成的key值进行加密,输出加密结果


三、后端模块的使用

1.使用

使用@Decrypt注解进行解密,使用@Encrypt注解进行加密,其中value属性写入需要加解密的字段(以EL的形式),其中若需要对方法返回值加解密,需要@{return}的方式。type属性指出需要哪种加解密方法。

如图,需要对getUser()方法的s参数进行解密,对返回值进行加密,加密方式为 EncryptType.Controller_RSA_AES。


2.新增/修改加密方式

在枚举类EncryptType中添加新的枚举方法即可

枚举类中有三个抽象方法:encrypt()、decrypt()、getKey(),新增的枚举需要实现这三个方法。


对注解的拦截是DecryptAspect和EncryptAspect类,这是两个切面。拦截两个注解标注的方法后将value值交给SPEL解析器解析后修改对应的值。


原文链接:juejin.im

上一篇:slate.js从入门到放弃
下一篇:tauri - 可替换 electron 的PC端 SPA 框架

相关推荐

  • 浏览器端rsa加密方案

    并没有体验多少库,只看了一个npm里最多人用的一个库: node-forge : 接口文档 前端代码 // 他们github有提供 forge.min.js , 不用webpack的项目也可以直接引用...

    1 年前
  • 在本地设置一个或者多个id_rsa 来连接 github 仓库并实现 git push / git pull

    场景一: 本地只需要一个 ssh id_rsa 来连接 GitHub仓库 现在有一个自己的 github 仓库 git@github.com:AAA/AAA.git, 需要将这个仓库 clone 到本...

    8 个月前
  • 关于前端加aes加密的这些事儿

    作为一位前端,前天昨天接到了一个小需求,就是做一个实名认证的页面出来,给出的接口文档如下。 说实话刚开始一看以上这段话是有点懵逼的,里面有着什么加密模式,填充,数据块等等。

    9 个月前
  • 从零开始构建前后端AES加密通信

    推荐 这里推荐使用ECB方式 CBC方式还是有问题,后端没有解密成功 使用方式 前端加密接口参数 后端解密参数,返回正常数据 下包 npm i -S crypto-js aes的ECB加密方式 前...

    3 个月前
  • 一套简单的基于 RSA + AES 加密机制的前端解决方案

    前言 因公司现有后台管理系统项目需对部分网络请求接口的重要数据进行加密,整合了一套简单的基于 RSA + AES 加密机制的前端解决方案。 参考文献: crypto 廖雪峰 crypto-js ...

    1 年前
  • xsalsa20-universal

    xsalsa20 instance that works in node and in the browser xsalsa20-universal xsalsa20 instance that wo...

    3 个月前
  • versalink-tsl2561-device

    Security holding package This package name is not currently in use, but was formerly occupied by ano...

    8 个月前
  • versalink-si1145-device

    Security holding package This package name is not currently in use, but was formerly occupied by ano...

    8 个月前
  • versalink-rmy85000-device

    Security holding package This package name is not currently in use, but was formerly occupied by ano...

    8 个月前
  • versalink-rain-device

    Security holding package This package name is not currently in use, but was formerly occupied by ano...

    8 个月前

官方社区

扫码加入 JavaScript 社区