Skip to content
On this page

接口加解密

基本介绍

在系统的基础架构中,安全框架、令牌鉴权已经是默认的基础功能; 但某些场景,仅有鉴权是不够的,一些比较重要的数据,一旦泄露将会导致很严重的后果; 所以在此之外,还需要一个针对请求报文加密解密的工具,下面我们就来看一下这个功能如何使用。

加解密运行逻辑

  1. 前后端约定一个共同的加密解密方式及密钥
  2. 前端发出请求,将请求参数通过工具加密传递至后端
  3. 后端对加密请求进行统一处理,使用约定好的解密方式与密钥进行参数解密
  4. 后端解密后获得对应的参数、对象,然后进行下一步操作
  5. 操作完毕返回到前端的时候,再次对返回参数进行数据加密
  6. 前端获取到加密数据,使用约定好的解密方式与密钥进行解密
  7. 前端解密后获得具体的对象再进行下一步操作
  8. 这样一来,前后端操作都已经完全加密化,再加上 token 加持,就可以给一些重要的 API 提供强有力的安全支撑

注解加解密

  1. 可进行加密的方式有:

    • ✅ AES(@ApiEncryptAes
    • ✅ DES(@ApiEncryptDes
    • ✅ RSA(@ApiEncryptRsa
  2. 可进行解密的方式有:

    • ✅ AES(@ApiDecryptAes
    • ✅ DES(@ApiDecryptDes
    • ✅ RSA(@ApiDecryptRsa

注解说明

一、解密(用于请求参数)

@ApiDecryptAes@ApiDecryptDes@ApiDecryptRsa,注解 secretKey 可配置当前使用的私钥,优先于全局的配置。

可使用范围:

  1. 方法参数(用于 get、post 的 url 参数),可配置统一的 url 变量名。base64 的 json 数据。
  2. 方法,用于(post 的 body)
  3. 类,表示整个控制器的(post 的 body)用于加密。

二、 加密(用于响应数据)

@ApiEncryptAes@ApiEncryptDes@ApiEncryptRsa,注解 secretKey 可配置当前使用的私钥,优先于全局的配置。

可使用范围:

  1. 方法,用于响应的 body 加密。
  2. 类,表示整个控制器的响应的 body 加密。

引入依赖

txt
<!-- api接口加解密,参数加解密 -->
<dependency>
		<groupId>com.kyny</groupId>
		<artifactId>cbb-starter-api-crypto</artifactId>
</dependency>

配置说明

配置项默认值说明
cbb.crypto.api.enabletrue是否开启 api 签名
cbb.crypto.api.param-namedataurl 的参数签名,传递的参数名。例如:/user?data=签名后的数据
cbb.crypto.api.rsa-private-keyrsa 私钥
cbb.crypto.api.rsa-public-keyrsa 公钥
cbb.crypto.api.aes-keyaes 密钥
cbb.crypto.api.des-keydes 密钥

注意:代码中的文本转换和签名均采用的 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