SpringBoot整合AES+RSA加密(含前端代码)
SpringBoot整合AES+RSA加密的核心步骤如下:
- 生成RSA公钥和私钥。
- 将RSA公钥提供给前端用于AES密钥的加密。
- 前端使用RSA公钥加密AES密钥,发送给后端。
- 后端使用RSA私钥解密获取AES密钥。
- 使用AES密钥加密数据。
以下是SpringBoot后端的核心代码示例:
import org.springframework.web.bind.annotation.*;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.util.Base64;
@RestController
public class EncryptController {
private static final String AES_ALGORITHM = "AES";
private static final String RSA_ALGORITHM = "RSA";
private static final int AES_KEY_SIZE = 128;
private KeyPair keyPair;
public EncryptController() throws Exception {
KeyPairGenerator keyGen = KeyPairGenerator.getInstance(RSA_ALGORITHM);
keyGen.initialize(2048);
this.keyPair = keyGen.generateKeyPair();
}
@GetMapping("/publicKey")
public String getPublicKey() {
return Base64.getEncoder().encodeToString(keyPair.getPublic().getEncoded());
}
@PostMapping("/encrypt")
public String encrypt(@RequestBody String data) throws Exception {
// 生成AES密钥
SecretKeySpec aesKey = generateAESKey();
// 使用AES密钥加密数据
String encryptedData = encryptAES(data, aesKey);
// 使用RSA公钥加密AES密钥
String encryptedAESKey = encryptRSA(aesKey.getEncoded(), keyPair.getPublic());
// 返回加密后的数据和加密后的AES密钥
return "{\"encryptedData\":\"" + encryptedData + "\",\"encryptedAESKey\":\"" + encryptedAESKey + "\"}";
}
private SecretKeySpec generateAESKey() throws Exception {
SecretKeySpec key = new SecretKeySpec(generateRandomBytes(AES_KEY_SIZE / 8), AES_ALGORITHM);
return key;
}
private byte[] generateRandomBytes(int length) {
byte[] keyBytes = new byte[length];
// 使用随机数初始化数组
return keyBytes;
}
private String encryptAES(String data, SecretKeySpec key) throws Exception {
Cipher cipher = Cipher.getInstance(AES_ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] encryptedData = cipher.doFinal(data.getBytes(StandardCharsets.UTF_8));
return Base64.getEncoder().encodeToString(encryptedData);
}
private String encryptRSA(byte[] data, java.security.PublicKey publicKey) throws Exception {
Cipher cipher
评论已关闭