# master-key **Repository Path**: vhukze/master-key ## Basic Information - **Project Name**: master-key - **Description**: 用来实现接口参数解密的工具,只需引入依赖,在配置文件写明加密的配置,在接口上使用指定注解即可实现该接口的参数解密。并支持使用validation模块的注解进行参数校验,支持分组校验 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 11 - **Forks**: 0 - **Created**: 2023-03-08 - **Last Updated**: 2023-12-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # master-key ## 版本更新记录 **更新的功能具体使用示例已经更新到详细使用说明中,请点击下方详细使用说明查看** ### 最新版本:1.4 优化自定义解密过程功能,使其只覆盖默认解密方式,注解中指定其他解密方式不受影响 **1.3版本** 新增map参数解密; 新增不同接口使用不同解密方式; **1.2版本** 新增全局解密配置和忽略解密注解; 新增自定义解密过程接口; --- **下面是简单示例,详细使用说明点这里:[详细使用说明](https://blog.csdn.net/qq_41890624/article/details/129449113)** ## 介绍 用来实现接口参数解密的工具,只需引入依赖,在配置文件写明加密的配置,在接口上使用指定注解即可实现该接口的参数解密。并支持使用validation模块的注解进行参数校验,支持分组校验功能 ## 软件架构 使用java8,springboot2.x.x,一个简单的springboot starter 启动器,功能中用到的工具类是hutool ## 安装教程 ### 1. 依赖 **当前最新版本为1.2** ``` io.github.vhukze master-key-spring-boot-starter 目前最新版本 ``` ### 2. 配置 >支持的对称加密方式:SM4,AES,DES,DESede >支持的非对称加密方式:RSA,SM2 --- **在配置类中注册参数解析器** ``` import com.vhukze.masterkey.master.DecodeResolver; import org.springframework.context.annotation.Configuration; import org.springframework.web.method.support.HandlerMethodArgumentResolver; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import javax.annotation.Resource; import java.util.List; /** * webmvc配置 */ @Configuration public class MasterKeyConfig implements WebMvcConfigurer { @Resource private DecodeResolver decodeResolver; /** * 注册自定义HandlerMethodArgumentResolver 接口参数解密 */ @Override public void addArgumentResolvers(List resolvers) { resolvers.add(decodeResolver); } } ``` --- **对称加密配置示例(配置到application.yml中)** ``` master-key: # 加密方式 encode: SM4 # 使用json格式参数时,解密之前json的key 不配置此参数则代表使用text格式参数,只传递加密后的字符串 json-key: str # 加密模式 mode: CBC # 填充方式 padding: ISO10126Padding # 秘钥 key: 1234123412ABCDEF # 盐值 salt: ABCDEF1234123412 ``` --- **对称加密配置项的可配置值** 加密方式(encode)|加密模式(mode)|填充方式(padding) --|:--:|--: |SM4|NONE|NoPadding| |AES|CBC|ZeroPadding| |DES|CFB|ISO10126Padding| |DESede|CTR|OAEPPadding| ||CTS|PKCS1Padding| ||ECB|PKCS5Padding| ||OFB|SSL3Padding| ||PCBC|| **非对称加密配置示例** ``` master-key: # 加密方式 encode: SM2 # 使用json格式参数时,解密之前json的key 不配置此参数则代表使用text格式参数,只传递加密后的字符串 json-key: # 公钥 public-key: MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEDRhJQbkA5SKceAaJmtdOBiRzCqwei4WRzAkBrZ9SkBZhZ1zC4nteRLVi754MsI/8vsiNK2lV518E8RaNw+mnLA== # 私钥 private-key: MIGTAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBHkwdwIBAQ ``` ### 3. 注意事项 **使用SM4和SM2国密加密算法时,需要引入国密加密的依赖 如下** ``` org.bouncycastle bcprov-jdk15to18 1.69 ``` ## 使用说明 >支持自定义实体类、基础数据类型及其包装类、集合类型。**加密前参数格式跟正常请求接口时相同** **例如,自定义实体类方式:首先前端把待传递的json参数使用配置的加密方式加密模式等进行加密,例:加密前:{"id":3,"count":4},加密后:c7dc378bf0c4da001466818765813a506b1a6b37e960b7ca** **接口用来接收参数的实体类:** ``` @Data public class Stock { private Integer id; private Integer count; } ``` **接口使用@ParamsDecode注解,标明此接口需要参数解密,如下** ``` @ParamsDecode @PostMapping("decode") public String decode(Stock stock){ return ""; } ``` ### 1. json格式传参 在配置文件配置好json-key,并使用配置的json-key构建json字符串,比如配置的json-key为str,json字符串如下 ``` { "str":"c7dc378bf0c4da001466818765813a506b1a6b37e960b7ca" } ``` **接下来使用构建好的json字符串作为参数请求接口即可** --- ### 2. text格式传参 **注意,不配置json-key即为使用text格式传参** 参数直接就是加密后的字符串,即c7dc378bf0c4da001466818765813a506b1a6b37e960b7ca **注意,不是表单传参,Content-Type为application/text** --- ### 3. 支持validation模块校验参数,支持分组校验功能 例如: ``` @Data public class Stock { @Max(3) @NotNull(groups = Edit.class) private Integer id; @NotBlank(groups = {Add.class, Edit.class}) private String name; @Min(3) private Integer count; public interface Add { } public interface Edit { } } ``` ``` @ParamsDecode @PostMapping("decode") public String decode(@Validated(value = Add.class) Stock stock) { return ""; } ``` ## 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request ## 特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)