encipher:SpringBoot接口AES加解密

359 阅读3分钟

encipher

基于SpringBoot框架,AES加密,JDK17,SpringBoot3.0,采用注解配置的方式来实现。

使用方法

使用maven引入框架

必须使用最新版本

<!-- https://mvnrepository.com/artifact/com.gitee.qinxianzhong/encipher -->
<dependency>
   <groupId>com.gitee.qinxianzhong</groupId>
   <artifactId>encipher</artifactId>
   <version>1.0.2</version>
</dependency>

首先使用方法生成密钥:

GenerateKeyUtils.generateKey(16 or 32) ,生成16或32位随机字符传密钥

生成32位的字符串随机密钥: aVG5oHI8U2qRgBqcFgzlfwkqUP3RvzKP

在application.yml配置

spring:
    encipher:
        secretKey: aVG5oHI8U2qRgBqcFgzlfwkqUP3RvzKP  //密钥
        vectorKey: //向量密钥
        method: //ECB CBC 两种加密方式  ECB模式下不需要vectorKey密钥

使用ECB模式演示

注解使用:

提供两种方式的加解密注解:@ApiEncrypt    @Encryption @Decryption

@ApiEncrypt:作用在Controller类方法上,实现Controller类下面所有的方法加解密

@ApiEncrypt
@RestController
@RequestMapping("/test")
public class TestController {


    @PostMapping("/setUser")
    public void setUser(@RequestBody User user){
        System.out.println(user.toString());
    }

    @GetMapping("/getUser")
    public User getUserName(String name){
        User user = new User(name,33,"南京", "男");
        System.out.println("name:" + name);
        return user;
    }

}

在Controller上加上@ApiEncrypt注解,下面看实现结果,可以使用在线AES加解密网站来测试。

​编辑

使用刚刚生成的密钥来生成加密结果:Zp6zJ2sMqtn3tvWTm9a+VQ==,使用这个加密过的内容,请求接口

​编辑

请求控制台

​编辑

name:张宇

用在线AES加解密网站看看接口返回的内容是什么

​编辑

这就是  @ApiEncrypt 注解的作用,请求方法全部实现加解密。

@Encryption 对请求返回的内容加密 @Decryption 对请求传参的内容解密

看看这两种注解的使用方法

@RestController
@RequestMapping("/test")
public class TestController {

    @Decryption
    @PostMapping("/setUser")
    public void setUser(@RequestBody User user){
        System.out.println(user.toString());
    }

    @Encryption
    @GetMapping("/getUser")
    public User getUserName(String name){
        User user = new User(name,33,"南京", "男");
        System.out.println("name:" + name);
        return user;
    }

}

@Decryption 解密注解放在了 /test/setUser 请求接口上面,请求接口传参加密内容会自动解密出来

请求方法有@RequestBody注解,所有传json格式的加密内容

​编辑

解密内容:

​编辑

@Encryption对返回的内容加密,@Encryption注解放在了 /test/getUser 请求接口上面,请求传参不会解密,返回内容会加密

​编辑

解密内容

​编辑

两个注解同时应用到一个方法上面,请求传参解密,返回内容加密

​编辑