接口加解密
基本介绍
在系统的基础架构中,安全框架、令牌鉴权已经是默认的基础功能; 但某些场景,仅有鉴权是不够的,一些比较重要的数据,一旦泄露将会导致很严重的后果; 所以在此之外,还需要一个针对请求报文加密解密的工具,下面我们就来看一下这个功能如何使用。
加解密运行逻辑
- 前后端约定一个共同的加密解密方式及密钥
- 前端发出请求,将请求参数通过工具加密传递至后端
- 后端对加密请求进行统一处理,使用约定好的解密方式与密钥进行参数解密
- 后端解密后获得对应的参数、对象,然后进行下一步操作
- 操作完毕返回到前端的时候,再次对返回参数进行数据加密
- 前端获取到加密数据,使用约定好的解密方式与密钥进行解密
- 前端解密后获得具体的对象再进行下一步操作
- 这样一来,前后端操作都已经完全加密化,再加上 token 加持,就可以给一些重要的 API 提供强有力的安全支撑
注解加解密
可进行加密的方式有:
- ✅ AES(
@ApiEncryptAes
) - ✅ DES(
@ApiEncryptDes
) - ✅ RSA(
@ApiEncryptRsa
)
- ✅ AES(
可进行解密的方式有:
- ✅ AES(
@ApiDecryptAes
) - ✅ DES(
@ApiDecryptDes
) - ✅ RSA(
@ApiDecryptRsa
)
- ✅ AES(
注解说明
一、解密(用于请求参数)
@ApiDecryptAes
、@ApiDecryptDes
、@ApiDecryptRsa
,注解 secretKey
可配置当前使用的私钥,优先于全局的配置。
可使用范围:
- 方法参数(用于 get、post 的 url 参数),可配置统一的 url 变量名。base64 的 json 数据。
- 方法,用于(post 的 body)
- 类,表示整个控制器的(post 的 body)用于加密。
二、 加密(用于响应数据)
@ApiEncryptAes
,@ApiEncryptDes
、@ApiEncryptRsa
,注解 secretKey
可配置当前使用的私钥,优先于全局的配置。
可使用范围:
- 方法,用于响应的 body 加密。
- 类,表示整个控制器的响应的 body 加密。
引入依赖
txt
<!-- api接口加解密,参数加解密 -->
<dependency>
<groupId>com.kyny</groupId>
<artifactId>cbb-starter-api-crypto</artifactId>
</dependency>
配置说明
配置项 | 默认值 | 说明 |
---|---|---|
cbb.crypto.api.enable | true | 是否开启 api 签名 |
cbb.crypto.api.param-name | data | url 的参数签名,传递的参数名。例如:/user?data=签名后的数据 |
cbb.crypto.api.rsa-private-key | rsa 私钥 | |
cbb.crypto.api.rsa-public-key | rsa 公钥 | |
cbb.crypto.api.aes-key | aes 密钥 | |
cbb.crypto.api.des-key | des 密钥 |
注意:代码中的文本转换和签名均采用的 utf-8
字符集。
本模块需要开启jackson
text-plain
的支持。
txt
cbb:
crypto:
api:
enabled: true
aes-key: cbbxcbbxcbbxcbbx
des-key: cbbxcbbx
rsa-private-key: MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAPbB8ometBEDZ3f3EyvIFw7qWPF4cla9kr9TJ6+OP569vabwJ7WA19MXWTfSPz0t60NbfcrX9a72G7THBSpLqXUZKn7v7WnhcfuGei/ojGjCFEC9YqJWtec2sCUVeqwAUKeOp/kp20IPlrIbIp24WZ4ONQwTc0s+dyZnwpwZLkDDAgMBAAECgYBtae9E5Xmbh6Jj98ro4WaUBwacP5eXbaS5sEILHmyIU0LaWGeLHA/W+mXlkhTXaFqGufVLsbmvNFJxtMPODtGai0DKpsj9fDSLal2q0uHxEc222gfMFxVKLJScBt3bhcX1VAr+qAOdEeXeEKvw0ocnFsLYOKs2rZgANV/MQcJwoQJBAP3DBP+5EGT5arArZ7At3NJ5j8bxRTZooDsR5SIhODSGgRTyumeK7ds4PUSma5tsgZFizh4sa7avBfgIlQIIp6MCQQD47xzg22km9zAvMwsvbOJwVKwBUj48lxuG1jc3Vn0ozzgiUtdV1eKBJzm5xT6I4NELLv0cdk4PhYLLtOvi2hRhAkEA0r9QO4Da2ME7lau2pV6xcit6+OIPdSxXRjeKcFneb+D0+wzLOorrF5ERcR41aBMpWDEStYR2wHWDI4cdGV9OuQJAFxoJsgxqq8UQ4bB4/0O5l/cjp1O8lt7nHRJQOYB7SQhCC11ownyA8r9zKfxWG1nRzJnlv3hzMhmP09vMcFcQwQJBAKUaXTvjfHDkHW2jRLm0vdfTRBOMh1flVTb2UReTNJ5oZsJGJZe/9FHyrKMt7TLt9H2VX+0rrBbbyMURjnj8MJw=
rsa-public-key: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQD2wfKJnrQRA2d39xMryBcO6ljxeHJWvZK/Uyevjj+evb2m8Ce1gNfTF1k30j89LetDW33K1/Wu9hu0xwUqS6l1GSp+7+1p4XH7hnov6IxowhRAvWKiVrXnNrAlFXqsAFCnjqf5KdtCD5ayGyKduFmeDjUME3NLPncmZ8KcGS5AwwIDAQAB
param-name: data