SpringBoot 接口加解密全过程详解

一、接口为什么要加密

接口加密传输,主要作用:

敏感数据防止泄漏、

保护隐私、

防伪装攻击、

防篡改攻击、

防重放攻击

等等…

4个字概括:保护数据!

当然不是说接口加密后,就能完完全全的保护我们的数据,但至少能防一部分人拿到我们的数据。

而且接口加密感觉逼格是不是高过一点!!!

二、加密思路

1、加密简介

加密算法有很多,在能加密又能解密的算法可分为:

非对称加密算法,常见:RSA、DSA、ECC

特点:算法复杂,加解密速度慢,但安全性高,一般与对称加密结合使用(对称加密对内容加密,非对称对对称所使用的密钥加密)

对称加密算法,常见:DES、3DES、AES、Blowfish、IDEA、RC5、RC6

特点:加密解密效率高,速度快,适合进行大数据量的加解密

2、加密流程

思路:

假设现在客户端是A,服务端是B,现在A要去B请求接口

1、A要向B发送信息,A和B都要产生一对用于加密的非对称加密公私钥(AB各自生成自己的公私钥)

2、A的私钥保密,A的公钥告诉B;B的私钥保密,B的公钥告诉A。(AB互换公钥)

3、A要给B发送信息时,A用B的公钥加密信息,因为A知道B的公钥。(公钥加密只有私钥能解)

4、A将这个消息发给B(已经用B的公钥加密消息)。

5、B收到这个消息后,B用自己的私钥解密A的消息。其他人收到这个报文都无法解密,因为只有B才有B的私钥。

虽然这样就实现了接口的加密方式,但是呢,非对称加密的加解密速度相比对称加密速度很慢,当传输的数据很大时就更加明显了。

所以我们对称与非对称一起用,理解上面的流程之后,我们在其基础稍微改下:

在A给B发信息的时候,随机生成一个对称加密的密钥,然后用刚生成的密钥加密信息,然后用B的公钥加密刚生成的对称密钥。

A把加密的两个信息发送给B。B收到数据之后,先用自己的私钥解开得到对称密钥,然后再用解开的对称密钥解开对称加密的信息,最终得到A传来的信息。

三、代码实现

在当下Java还是SpringBoot为主流框架工作面试必备,今天还是以它来举例。

加解密代码怎么写,这个时候网上已经有很多现成的库了,不用我们操心,我们想的是如何在接口加解密的时候不影响我们自己的业务,也就是不用更改我们已经写好的代码。

很多人的第一反应应该就是AOP吧,对的没错可以使用AOP进行环绕增强。也可以使用@ControllerAdvice 对Controller进行增强(本文以它来做为例子)。

Spring 提供两个接口RequestBodyAdvice、ResponseBodyAdvice。实现它们,即可对Controller进行增强,第一个是在controller之前增强,第二个就是对controller 的返回值进行增强。

在spring启动的时候会对RequestMappingHandlerAdapter的initControllerAdviceCache()方法进行初始化。会去把有@ControllerAdvice的类进行注入。

>>>> https://www.toutiao.com/article/7187009763371123238/?log_from=6945981e6e727_1679963545019

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容