springboot 实现aes+rsa加解密
时间: 2023-07-08 13:14:48 浏览: 205
springboot-rsa-aes-demo:RSA和AES前端数据加密,对数据解密,以及返回参数加密,前端解密,完整原始文件,由于是城市表面常用的是这二种加解密方式,所以就写了这二种,每天会自动更换密关键字,后续我会陆续更新其他的加解密算法,技术点采用在新的spring-boot 2.3.1版本+ mybatisPlus + mysql数据库
5星 · 资源好评率100%
首先,我们可以使用RSA算法来加密AES的密钥,然后使用AES算法来加密数据。
1. 生成RSA公私钥对
```java
KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA");
generator.initialize(2048);
KeyPair keyPair = generator.generateKeyPair();
PublicKey publicKey = keyPair.getPublic();
PrivateKey privateKey = keyPair.getPrivate();
```
2. 使用RSA公钥加密AES密钥
```java
// 生成AES密钥
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
keyGenerator.init(128);
SecretKey secretKey = keyGenerator.generateKey();
// 使用RSA公钥加密AES密钥
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] encryptedKey = cipher.doFinal(secretKey.getEncoded());
```
3. 使用AES密钥加密数据
```java
// 使用AES密钥加密数据
byte[] rawData = "hello world".getBytes("UTF-8");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
byte[] encryptedData = cipher.doFinal(rawData);
```
4. 使用RSA私钥解密AES密钥
```java
// 使用RSA私钥解密AES密钥
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] decryptedKey = cipher.doFinal(encryptedKey);
SecretKey originalKey = new SecretKeySpec(decryptedKey, 0, decryptedKey.length, "AES");
```
5. 使用AES密钥解密数据
```java
// 使用AES密钥解密数据
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, originalKey);
byte[] decryptedData = cipher.doFinal(encryptedData);
```
注意事项:
- AES密钥需要保密,不能直接传输或存储。
- RSA加密的数据长度不能超过RSA公钥的长度。因此,如果需要加密的数据较长,可以使用AES算法对数据进行分块加密。
阅读全文