api接口加密
1.为什么需要api接口加密呢?
1.防止爬虫
2.防止数据被串改
3.确保数据安全
2.如何实现接口加密呢?
3.我们可以使用哪些加密算法来加密呢?
AES
密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。
SM4
SM4.0(原名SMS4.0)是中华人民共和国政府采用的一种分组密码标准,由国家密码管理局于2012年3月21日发布。相关标准为“GM/T 0002-2012《SM4分组密码算法》(原SMS4分组密码算法)”。在商用密码体系中,SM4主要用于数据加密,其算法公开,分组长度与密钥长度均为128bit,加密算法与密钥扩展算法都采用32轮非线性迭代结构,S盒为固定的8比特输入8比特输出。SM4.0中的指令长度被提升到大于64K(即64×1024)的水平,这是SM 3.0规格(渲染指令长度允许大于512)的128倍。
4.具体实现
4.1后端
在这之前我们先了解一个类RequestBodyAdviceAdapter,主要通过该类实现~
RequestBodyAdviceAdapter
官网解释:RequestBodyAdviceAdapter (Spring Framework 6.2.1 API)
RequestBodyAdviceAdapter是Spring MVC中用于增强请求体处理的一个工具类,它实现了RequestBodyAdvice接口。RequestBodyAdviceAdapter提供了三个主要方法:beforeBodyRead
、afterBodyRead
和handleEmptyBody
。
-
beforeBodyRead:这个方法在请求体被读取之前调用,主要用于预处理请求体。默认实现是直接返回传入的
HttpInputMessage
对象。 -
afterBodyRead:在请求体被读取并转换为对象之后调用,用于对读取到的对象进行进一步处理。默认实现是直接返回转换后的对象。
-
handleEmptyBody:当请求体为空时调用,用于处理这种情况。默认实现是直接返回null。
代码实现
这里我们使用类似Aop的思想实现,定义对应的注解!
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
public @interface ApiDecrypt { //解密
}
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
public @interface ApiEncrypt {//加密
}
@Slf4j
@ControllerAdvice
public class DecryptRequestAdvice extends RequestBodyAdviceAdapter {
private static final String ENCODING = "UTF-8";
@Resource