Browse Source

加密和解密模块测试

master
zhouyl 1 year ago
parent
commit
d30f7c8972
  1. 7
      tp-admin/src/main/resources/application-dev.yml
  2. 7
      tp-admin/src/main/resources/application.yml
  3. 1
      tp-common/src/main/java/com/inscloudtech/common/encrypt/filter/CryptoFilter.java
  4. 59
      tp-functional/src/main/java/com/inscloudtech/functional/controller/TestEncryptController.java
  5. 66
      tp-functional/src/main/java/com/inscloudtech/functional/domain/TestDemo.java
  6. 34
      tp-functional/src/main/java/com/inscloudtech/functional/domain/TestDemoEncrypt.java
  7. 27
      tp-functional/src/main/java/com/inscloudtech/functional/domain/vo/TestDemoBo.java
  8. 16
      tp-functional/src/main/java/com/inscloudtech/functional/mapper/TestDemoEncryptMapper.java

7
tp-admin/src/main/resources/application-dev.yml

@ -21,6 +21,13 @@ spring:
username: root username: root
password: 123456 password: 123456
# 从库数据源 # 从库数据源
sensitiveDb:
lazy: true
type: ${spring.datasource.type}
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://ly:3306/test_p_sensitive_db?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true
username: root
password: 123456
hikari: hikari:
# 最大连接池数量 # 最大连接池数量
maxPoolSize: 20 maxPoolSize: 20

7
tp-admin/src/main/resources/application.yml

@ -186,7 +186,7 @@ mybatis-plus:
# 数据加密 # 数据加密
mybatis-encryptor: mybatis-encryptor:
# 是否开启加密 # 是否开启加密
enable: false
enable: true
# 默认加密算法 # 默认加密算法
algorithm: BASE64 algorithm: BASE64
# 编码方式 BASE64/HEX。默认BASE64 # 编码方式 BASE64/HEX。默认BASE64
@ -195,7 +195,8 @@ mybatis-encryptor:
password: password:
# 公私钥 非对称算法的公私钥 如:SM2,RSA # 公私钥 非对称算法的公私钥 如:SM2,RSA
publicKey: publicKey:
privateKey:
privateKey: MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBANBBEeueWlXlkkj2+WY5l+IWe42d8b5K28g+G/CFKC/yYAEHtqGlCsBOrb+YBkG9mPzmuYA/n9k0NFIc8E8yY5vZQaroyFBrTTWEzG9RY2f7Y3svVyybs6jpXSUs4xff8abo7wL1Y/wUaeatTViamxYnyTvdTmLm3d+JjRij68rxAgMBAAECgYAB0TnhXraSopwIVRfmboea1b0upl+BUdTJcmci412UjrKr5aE695ZLPkXbFXijVu7HJlyyv94NVUdaMACV7Ku/S2RuNB70M7YJm8rAjHFC3/i2ZeIM60h1Ziy4QKv0XM3pRATlDCDNhC1WUrtQCQSgU8kcp6eUUppruOqDzcY04QJBAPm9+sBP9CwDRgy3e5+V8aZtJkwDstb0lVVV/KY890cydVxiCwvX3fqVnxKMlb+x0YtH0sb9v+71xvK2lGobaRECQQDVePU6r/cCEfpc+nkWF6osAH1f8Mux3rYv2DoBGvaPzV2BGfsLed4neRfCwWNCKvGPCdW+L0xMJg8+RwaoBUPhAkAT5kViqXxFPYWJYd1h2+rDXhMdH3ZSlm6HvDBDdrwlWinr0Iwcx3iSjPV93uHXwm118aUj4fg3LDJMCKxOwBxhAkByrQXfvwOMYygBprRBf/j0plazoWFrbd6lGR0f1uI5IfNnFRPdeFw1DEINZ2Hw+6zEUF44SqRMC+4IYJNc02dBAkBCgy7RvfyV/A7N6kKXxTHauY0v6XwSSvpeKtRJkbIcRWOdIYvaHO9L7cklj3vIEdwjSUp9K4VTBYYlmAz1xh03", publicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDQQRHrnlpV5ZJI9vlmOZfiFnuNnfG+StvIPhvwhSgv8mABB7ahpQrATq2/mAZBvZj85rmAP5/ZNDRSHPBPMmOb2UGq6MhQa001hMxvUWNn+2N7L1csm7Oo6V0lLOMX3/Gm6O8C9WP8FGnmrU1YmpsWJ8k73U5i5t3fiY0Yo+vK8QIDAQAB
springdoc: springdoc:
api-docs: api-docs:
@ -273,7 +274,7 @@ api-decrypt:
# AES 加密头标识 # AES 加密头标识
headerFlag: encrypt-key headerFlag: encrypt-key
# 响应加密公钥 非对称算法的公私钥 如:SM2,RSA 使用者请自行更换 # 响应加密公钥 非对称算法的公私钥 如:SM2,RSA 使用者请自行更换
# 对应前端解密私钥 MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAmc3CuPiGL/LcIIm7zryCEIbl1SPzBkr75E2VMtxegyZ1lYRD+7TZGAPkvIsBcaMs6Nsy0L78n2qh+lIZMpLH8wIDAQABAkEAk82Mhz0tlv6IVCyIcw/s3f0E+WLmtPFyR9/WtV3Y5aaejUkU60JpX4m5xNR2VaqOLTZAYjW8Wy0aXr3zYIhhQQIhAMfqR9oFdYw1J9SsNc+CrhugAvKTi0+BF6VoL6psWhvbAiEAxPPNTmrkmrXwdm/pQQu3UOQmc2vCZ5tiKpW10CgJi8kCIFGkL6utxw93Ncj4exE/gPLvKcT+1Emnoox+O9kRXss5AiAMtYLJDaLEzPrAWcZeeSgSIzbL+ecokmFKSDDcRske6QIgSMkHedwND1olF8vlKsJUGK3BcdtM8w4Xq7BpSBwsloE=
# 对应前端解密私钥
publicKey: MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAOaMhVBSMYjtP1iIF/QX0nyJHnjGKxt4vTOULpLd4knEYS8s7lRElyvS6BApUgEhNbce1d8c9dI8G4cppNNBNtcCAwEAAQ== publicKey: MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAOaMhVBSMYjtP1iIF/QX0nyJHnjGKxt4vTOULpLd4knEYS8s7lRElyvS6BApUgEhNbce1d8c9dI8G4cppNNBNtcCAwEAAQ==
# 请求解密私钥 非对称算法的公私钥 如:SM2,RSA 使用者请自行更换 # 请求解密私钥 非对称算法的公私钥 如:SM2,RSA 使用者请自行更换
# 对应前端加密公钥 # 对应前端加密公钥

1
tp-common/src/main/java/com/inscloudtech/common/encrypt/filter/CryptoFilter.java

@ -26,6 +26,7 @@ import java.util.Objects;
/** /**
* api加密
* Crypto 过滤器 * Crypto 过滤器
* *
* @author wdhcr * @author wdhcr

59
tp-functional/src/main/java/com/inscloudtech/functional/controller/TestEncryptController.java

@ -0,0 +1,59 @@
package com.inscloudtech.functional.controller;
import com.inscloudtech.common.annotation.Log;
import com.inscloudtech.common.core.domain.R;
import com.inscloudtech.common.encrypt.annotation.ApiEncrypt;
import com.inscloudtech.common.enums.BusinessType;
import com.inscloudtech.functional.domain.TestDemoEncrypt;
import com.inscloudtech.functional.domain.vo.TestDemoBo;
import com.inscloudtech.functional.mapper.TestDemoEncryptMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* 创建敏感数据库
*
*/
@Validated
@RestController
@RequestMapping("/functional/encrypt")
public class TestEncryptController {
@Autowired
private TestDemoEncryptMapper mapper;
@Value("${mybatis-encryptor.enable}")
private Boolean encryptEnable;
/**
* 加密和解密模块测试
*/
@ApiEncrypt(response = true)
@Log(title = "测试敏感数据库加解密", businessType = BusinessType.UPDATE)
@PostMapping("/de")
public R<Map<String, TestDemoEncrypt>> test(@RequestBody TestDemoBo bo) {
if (!encryptEnable) {
throw new RuntimeException("加密功能未开启!");
}
Map<String, TestDemoEncrypt> map = new HashMap<>(2);
TestDemoEncrypt demo = new TestDemoEncrypt();
demo.setTestKey(bo.getKey());
demo.setValue(bo.getValue());
mapper.insert(demo);
map.put("加密", demo);
TestDemoEncrypt testDemo = mapper.selectById(demo.getId());
map.put("解密", testDemo);
return R.ok(map);
}
}

66
tp-functional/src/main/java/com/inscloudtech/functional/domain/TestDemo.java

@ -0,0 +1,66 @@
package com.inscloudtech.functional.domain;
import com.baomidou.mybatisplus.annotation.*;
import com.inscloudtech.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 测试单表对象 test_demo
*
* @author Lion Li
* @date 2021-07-26
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("test_demo")
public class TestDemo extends BaseEntity {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@TableId(value = "id")
private Long id;
/**
* 部门id
*/
private Long deptId;
/**
* 用户id
*/
private Long userId;
/**
* 排序号
*/
@OrderBy(asc = false, sort = 1)
private Integer orderNum;
/**
* key键
*/
private String testKey;
/**
*
*/
private String value;
/**
* 版本
*/
@Version
private Long version;
/**
* 删除标志
*/
@TableLogic
private Long delFlag;
}

34
tp-functional/src/main/java/com/inscloudtech/functional/domain/TestDemoEncrypt.java

@ -0,0 +1,34 @@
package com.inscloudtech.functional.domain;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.inscloudtech.common.encrypt.annotation.EncryptField;
import com.inscloudtech.common.encrypt.enumd.AlgorithmType;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("test_demo")
public class TestDemoEncrypt extends TestDemo {
/**
* key键
*/
// @EncryptField(algorithm=AlgorithmType.SM2, privateKey = "MIGTAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBHkwdwIBAQQgZSlOvw8FBiH+aFJWLYZP/VRjg9wjfRarTkGBZd/T3N+gCgYIKoEcz1UBgi2hRANCAAR5DGuQwJqkxnbCsP+iPSDoHWIF4RwcR5EsSvT8QPxO1wRkR2IhCkzvRb32x2CUgJFdvoqVqfApFDPZzShqzBwX", publicKey = "MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEeQxrkMCapMZ2wrD/oj0g6B1iBeEcHEeRLEr0/ED8TtcEZEdiIQpM70W99sdglICRXb6KlanwKRQz2c0oaswcFw==")
@EncryptField(algorithm = AlgorithmType.RSA, privateKey = "MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBANBBEeueWlXlkkj2+WY5l+IWe42d8b5K28g+G/CFKC/yYAEHtqGlCsBOrb+YBkG9mPzmuYA/n9k0NFIc8E8yY5vZQaroyFBrTTWEzG9RY2f7Y3svVyybs6jpXSUs4xff8abo7wL1Y/wUaeatTViamxYnyTvdTmLm3d+JjRij68rxAgMBAAECgYAB0TnhXraSopwIVRfmboea1b0upl+BUdTJcmci412UjrKr5aE695ZLPkXbFXijVu7HJlyyv94NVUdaMACV7Ku/S2RuNB70M7YJm8rAjHFC3/i2ZeIM60h1Ziy4QKv0XM3pRATlDCDNhC1WUrtQCQSgU8kcp6eUUppruOqDzcY04QJBAPm9+sBP9CwDRgy3e5+V8aZtJkwDstb0lVVV/KY890cydVxiCwvX3fqVnxKMlb+x0YtH0sb9v+71xvK2lGobaRECQQDVePU6r/cCEfpc+nkWF6osAH1f8Mux3rYv2DoBGvaPzV2BGfsLed4neRfCwWNCKvGPCdW+L0xMJg8+RwaoBUPhAkAT5kViqXxFPYWJYd1h2+rDXhMdH3ZSlm6HvDBDdrwlWinr0Iwcx3iSjPV93uHXwm118aUj4fg3LDJMCKxOwBxhAkByrQXfvwOMYygBprRBf/j0plazoWFrbd6lGR0f1uI5IfNnFRPdeFw1DEINZ2Hw+6zEUF44SqRMC+4IYJNc02dBAkBCgy7RvfyV/A7N6kKXxTHauY0v6XwSSvpeKtRJkbIcRWOdIYvaHO9L7cklj3vIEdwjSUp9K4VTBYYlmAz1xh03", publicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDQQRHrnlpV5ZJI9vlmOZfiFnuNnfG+StvIPhvwhSgv8mABB7ahpQrATq2/mAZBvZj85rmAP5/ZNDRSHPBPMmOb2UGq6MhQa001hMxvUWNn+2N7L1csm7Oo6V0lLOMX3/Gm6O8C9WP8FGnmrU1YmpsWJ8k73U5i5t3fiY0Yo+vK8QIDAQAB")
private String testKey;
/**
* 值不同的加密方式
*/
// @EncryptField // 什么也不写走默认yml配置
// @EncryptField(algorithm = AlgorithmType.SM4, password = "10rfylhtccpuyke5")
@EncryptField(algorithm = AlgorithmType.AES, password = "10rfylhtccpuyke5")
private String value;
}

27
tp-functional/src/main/java/com/inscloudtech/functional/domain/vo/TestDemoBo.java

@ -0,0 +1,27 @@
package com.inscloudtech.functional.domain.vo;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
*/
@Data
public class TestDemoBo implements Serializable {
private static final long serialVersionUID = 1L;
/**
* key
*/
@NotBlank(message = "key不能为空")
private String key;
/**
* value
*/
@NotBlank(message = "value不能为空")
private String value;
}

16
tp-functional/src/main/java/com/inscloudtech/functional/mapper/TestDemoEncryptMapper.java

@ -0,0 +1,16 @@
package com.inscloudtech.functional.mapper;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.inscloudtech.common.core.mapper.BaseMapperPlus;
import com.inscloudtech.functional.domain.TestDemoEncrypt;
/**
* 测试加密功能
*
* @author Lion Li
*/
@DS("sensitiveDb")
public interface TestDemoEncryptMapper extends BaseMapperPlus<TestDemoEncryptMapper,TestDemoEncrypt, TestDemoEncrypt> {
}
Loading…
Cancel
Save