在 Spring Boot 中实现接口数据的加解密可以通过多种方式来完成,以下是一种常见的实现方法,使用 AES 算法进行加解密。下面是一个简单的示例,展示如何在 Spring Boot 中实现数据加解密。
1. Maven 依赖
确保你的 pom.xml 中有以下依赖(如果尚未存在):
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
2. 加解密工具类
创建一个工具类,用于处理 AES 的加解密操作。
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
public class AESUtils {
private static final String ALGORITHM = "AES";
// 生成密钥
public static SecretKey generateKey() throws Exception {
KeyGenerator keyGen = KeyGenerator.getInstance(ALGORITHM);
keyGen.init(128); // 可以使用 192 或 256 位
return keyGen.generateKey();
}
// 加密
public static String encrypt(String data, SecretKey key) throws Exception {
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] encryptedData = cipher.doFinal(data.getBytes());
return Base64.getEncoder().encodeToString(encryptedData);
}
// 解密
public static String decrypt(String encryptedData, SecretKey key) throws Exception {
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] decryptedData = cipher.doFinal(Base64.getDecoder().decode(encryptedData));
return new String(decryptedData);
}
}
在你的 Controller 中,你可以通过上面的工具类进行数据的加解密处理:
import org.springframework.web.bind.annotation.*;
import javax.crypto.SecretKey;
@RestController
@RequestMapping("/api")
public class MyController {
private SecretKey secretKey = AESUtils.generateKey(); // 生成密钥,实际使用时应妥善保管
@PostMapping("/encrypt")
public String encrypt(@RequestBody String data) {
try {
return AESUtils.encrypt(data, secretKey);
} catch (Exception e) {
e.printStackTrace();
return "Encryption failed.";
}
}
@PostMapping("/decrypt")
public String decrypt(@RequestBody String encryptedData) {
try {
return AESUtils.decrypt(encryptedData, secretKey);
} catch (Exception e) {
e.printStackTrace();
return "Decryption failed.";
}
}
}
加密:向 /api/encrypt 接口发送 POST 请求,主体为想要加密的数据。
解密:向 /api/decrypt 接口发送 POST 请求,主体为加密后的数据。
密钥管理:示例中密钥是以简单方式生成和存储的。在实际应用中,密钥的生成、存储和管理需要更为安全的策略。
加密安全性:根据项目需求选择合适的加密算法和密钥长度,AES-256 用户更安全,但可能需要额外的库来支持。
性能考虑:加解密可能会影响性能,特别是在大量数据的情况下,需进行相应的优化。
根据项目需求,你可以进一步完善上述实现,比如添加异常处理、日志记录等。