springboot+vue接口加密:RSA+AES

1. 整体预览

  • 整体思想为:

先使用AES对数据进行加密,再使用RSA对AES密钥进行加密。

  • 至于为什么要使用这种方式呢?总结起来大致就是又安全速度又快。
1. RSA算法复杂,比较耗时,但比较安全
2. AES密钥固定,双方使用同一密钥,但速度快效率高
3. 所以用AES密钥加密数据,RSA加密AES密钥,形成混合加密
  • 至于RSA和AES是什么?文章篇幅有限,还请大家到网上自行了解。

  • 接下来是实现加密的具体流程。

  • 请求:
  1. 客户端发起请求时,客户端使用随机生成的AES密钥对数据进行加密
  2. 使用服务器的 公钥 对AES密钥进行加密
  3. 加密后的数据和AES密钥 作为请求数据发送至服务器。
  4. 服务器收到请求后,使用服务器的 私钥 对加密过的AES密钥进行解密
  5. 再使用获取到的AES密钥对加密的数据进行解密。
  6. 以此保证客户端发送的数据只能被服务器解密进行处理。
  • 响应:
  1. 服务器处理完数据后,将响应数据先使用随机生成(新)的AES密钥进行加密
  2. 使用服务器的 私钥 对AES密钥进行签名(签名算法为[ MD5withRSA ])
  3. 加密后的响应数据、AES密钥、签名 作为响应数据发送至客户端。
  4. 客户端收到响应后,先使用服务器的 公钥 对签名过的AES密钥进行验证
  5. 验签成功后再使用的AES密钥对加密的响应数据进行解密。
  6. 以此保证客户端收到的响应数据为合法服务器返回的。

2. 加密方式

  • 加密算法: AES
  • KEY长度: 16 * 8
  • 加密模式: ECB
  • 数据填充方式: PKCS5Padding
  • 加密算法: RSA
  • RSA位数: 2048
  • 加密模式: ECB
  • 数据填充方式: PKCS1Padding

3. 例

  • 需要加密的数据: {"staffUid": "zs"}
  • 生成的AES密钥: 1@HLKMUCHkywdrel
  • 数据加密后: 1qQL/+ufmvg124o5lc/IvzNVKsJniWomAaTrwWLX/4E=
  • 服务器公钥:
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnYnyTKWgBrrPeP/5D0w8Ts5aSiJKOgZ2TV9WkTDLwnE4nHpKxkE80uEP0jocJYboZ2wY+M9w4U01RBc7V5uqI4w46EoD0t3oBWkymKYsOfs0FLdPsqeGc7wUBkysJ3oGJcv3DRBXUrnJo3LJbxpOW/34CdGsLpfND6rAQFnR6oQNWUUskZYobsbhNSO7MGp0FSZNnXdz9ahS2QAHQWkycBZfqx6iLqA701LTsBrA4cAWTMxmlKrCSUCwZb85hrK7fCNkS8NMqpMLuN466TQgfZ/umFD38LwdiW2k/5glxNkhGsrjFmPzEnGqYhhIG1BJ3npdX/dhU69D3r91g8Hf4wIDAQAB
  • 使用公钥加密后的AES密钥:
ihPxFWDmLPDw5VUXu4ClbFBZxy92ZKhp4E8ypl7uM/9gWJpKPMcMPk1GERPKmzD24Rx06v3ROuo5Dj1Lryc1XVjvvSC9Z6Jq7fmCtMUjQJW/7PdXgO9PQmId/3J2q5NtWPutyyuyTAz5J+tDPGKUlzGvO5vcxQVJXj4O3kBYZqZu8yVqbtx23zeXclQPmtmJYxNaZO84eJb1HymlngbmDKgDtH0+UyRM9fgksDDBbI6gfeRvSOdUmlD/oTqnnS0AFzucjnnNFeugeoRlE1sXnKuv47ePpJDLzgX+XHZjwhWhMLmNLZscE0IL1Ue4JUdRmzKc3Xb3SUu+/b6zBiHl6w==
  • 发送的请求数据:
data: 1qQL/+ufmvg124o5lc/IvzNVKsJniWomAaTrwWLX/4E=
aesKey: ihPxFWDmLPDw5VUXu4ClbFBZxy92ZKhp4E8ypl7uM/9gWJpKPMcMPk1GERPKmzD24Rx06v3ROuo5Dj1Lryc1XVjvvSC9Z6Jq7fmCtMUjQJW/7PdXgO9PQmId/3J2q5NtWPutyyuyTAz5J+tDPGKUlzGvO5vcxQVJXj4O3kBYZqZu8yVqbtx23zeXclQPmtmJYxNaZO84eJb1HymlngbmDKgDtH0+UyRM9fgksDDBbI6gfeRvSOdUmlD/oTqnnS0AFzucjnnNFeugeoRlE1sXnKuv47ePpJDLzgX+XHZjwhWhMLmNLZscE0IL1Ue4JUdRmzKc3Xb3SUu+/b6zBiHl6w==
  • 响应结果如下:
{
    "code": 200,
    "message": "操作成功",
    "data": {
	"data": "zKpHLUQ9NtvRizSUwdEtuM5pMOWf8qBGmGuW1ZYqGeQMw/00i4wwhXMCS0MoabdJ4zP6ETdZip02xq9sb/4EtRvLFWEqoVOs4MXtFV8QYiWsMxw1jbmRQmWCc8WBlqtQVkLyQfdQw51LIapbLtfrZGXhryqSHZhil6RUHU4RuXqwUPBMzlsobquhxKMNePJ6hGcEi5Z+JIcAeUNVWCP9hrfNPl/zYNrf4WWvmCW/tnBS2ffg34Unqho+iywEW+46bUfbgnE34LgeZqCNMG7MfyNY+DHueaWcwcPekNzzbdmawWUfs4miTUkh7Uz7Fm7+AdrmM/ZCgIqwene1LpYZVaJyHgLwlLX31gzXVeQxYpdshnbz+x6Rmf81xS+gysVrQywXVY13/QWz+mb9jmPqcS04vHf9sbA0pZ7UjUMVe+3mXK4mUdL11eq+Ti+ZvqnEIYKkOxKrOJWoQ1mKT86cMoYcS18Fu8+oTgRch2S1QZrEVApnoHBvjJXsgsl4PRIHWZZEPGhFAohK0fXQXr7JQQLee8ALpxVEd1RyFOevoBnO/Dt5MeKsmKNBK7HMQpxB",
	"aesKey": "U85n3MtPMlmPTwLs",
	"sign": "F6mQbV40E9SbuV/m+jIH+VDCqtxFOhzO10XLCGZoZ2b8We5a1BSXPum8S+7oAu/JaqfYi3fPFjzLHCVu+uWhSMhch3m1IRFOpZp7Pa04AawbUv0MuyrtyBqgNjLxJna5FhTX4NbOc4VaT1gvLO3wi4KWuZ5Ymp1ALWDW1QrmJkYzKasp6lsVyovYuj6GWESykdlmskzdI6iECSXtRatb3NpIe2vc9By8sXd8VytbcNlTHQHcidnuQNprYexp53IpbMRNma9zpqM+iqzX+PWUYlaSMLxeUEskLT3h/V4YhMj2vorrf1HM+nyGxO2gR+sVQnb8sy7caJy8c/2m12AlwA=="
    }
}
  • 响应解密后:
{
   "code": 200,
   "message": "操作成功",
   "data": {
   	"id": 1,
   	"staffUid": "zs",
   	"staffPassword": null,
   	"staffName": "张三",
   	"staffCardId": "123",
   	"staffLoginName": "zszs",
   	"staffEmail": "abc@123.com",
   	"staffPhone": "13696365412",
   	"staffAdmin": 1,
   	"staffStatus": 0,
   	"staffDepartment": "IT",
   	"staffCode": "qwer",
   	"remark": null,
   	"createdBy": "system",
   	"createdTime": "2022-10-27 14:14:50",
   	"updatedBy": "zs",
   	"updatedTime": "2022-11-21 17:54:22",
   	"status": 0
   }
}

4. 代码

前端

  • 在何处使用?某个vue文件中,将参数通过方法加密后传入请求,待请求结束后,对响应数据使用对应的方法验签解密。
// 测试用例 此处没有逻辑关系
loginForm: {
  staffUid: ''
}
  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值