Java使用RSA和AES实现加密解密的详细实例代码
84 浏览量
更新于2024-09-01
收藏 72KB PDF 举报
Java 使用 RSA 与 AES 加密解密的实例代码详解
加密解密基础知识
在了解 Java 使用 RSA 与 AES 加密解密的实例代码之前,需要先了解加密解密的基础知识。加密解密可以分为对称加密和非对称加密两种。
对称加密
对称加密是指加密和解密使用相同的密钥。对称加密的优点是速度快,常用的对称加密算法有 AES、DES 等。对称加密的缺点是密钥的管理和分发不方便。
非对称加密
非对称加密是指加密和解密使用不同的密钥。非对称加密的优点是可以实现身份验证和加密,常用的非对称加密算法有 RSA、DSA 等。非对称加密的缺点是速度慢。
Java 中的加密解密
Java 中提供了多种加密解密算法,包括对称加密和非对称加密。Java 的加密解密API 由 Java Cryptography Architecture (JCA) 提供。
RSA 加密解密
RSA 是一种非对称加密算法,常用于身份验证和加密。RSA 的加密解密过程可以分为以下步骤:
1. 生成密钥对:生成一对公钥和私钥。
2. 加密:使用公钥加密数据。
3. 解密:使用私钥解密数据。
AES 加密解密
AES 是一种对称加密算法,常用于加密数据。AES 的加密解密过程可以分为以下步骤:
1. 生成密钥:生成一个密钥。
2. 加密:使用密钥加密数据。
3. 解密:使用密钥解密数据。
Java 中使用 RSA 和 AES 加密解密
Java 中可以使用 Bouncy Castle library 实现 RSA 和 AES 加密解密。Bouncy Castle 是一个开源的加密库,提供了多种加密算法的实现。
RSAUtils 工具类
下面是一个使用 Bouncy Castle library 实现的 RSAUtils 工具类:
```java
package cn.wangtao.utils;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.crypto.Cipher;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.security.*;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
public class RSAUtils {
private static final String RSA = "RSA"; // 加密方式
private static final Logger logger = LoggerFactory.getLogger(RSAUtils.class);
// 获取密钥
public static KeyPair getKey() throws Exception {
// 生成密钥对
KeyPairGenerator kpg = KeyPairGenerator.getInstance(RSA);
kpg.initialize(1024);
KeyPair kp = kpg.generateKeyPair();
return kp;
}
// 加密
public static byte[] encrypt(byte[] data, PublicKey publicKey) throws Exception {
Cipher cipher = Cipher.getInstance(RSA);
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
return cipher.doFinal(data);
}
// 解密
public static byte[] decrypt(byte[] data, PrivateKey privateKey) throws Exception {
Cipher cipher = Cipher.getInstance(RSA);
cipher.init(Cipher.DECRYPT_MODE, privateKey);
return cipher.doFinal(data);
}
}
```
使用 RSAUtils 工具类
使用 RSAUtils 工具类可以实现 RSA 加密解密。下面是一个示例代码:
```java
public class Main {
public static void main(String[] args) throws Exception {
// 生成密钥对
KeyPair kp = RSAUtils.getKey();
// 加密
byte[] data = "Hello, World!".getBytes();
byte[] encryptedData = RSAUtils.encrypt(data, kp.getPublic());
// 解密
byte[] decryptedData = RSAUtils.decrypt(encryptedData, kp.getPrivate());
System.out.println(new String(decryptedData));
}
}
```
AES 加密解密
下面是一个使用 AES 加密解密的示例代码:
```java
public class AESUtils {
private static final String AES = "AES"; // 加密方式
// 加密
public static byte[] encrypt(byte[] data, byte[] key) throws Exception {
Cipher cipher = Cipher.getInstance(AES);
cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(key, AES));
return cipher.doFinal(data);
}
// 解密
public static byte[] decrypt(byte[] data, byte[] key) throws Exception {
Cipher cipher = Cipher.getInstance(AES);
cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(key, AES));
return cipher.doFinal(data);
}
}
```
使用 AESUtils 工具类
使用 AESUtils 工具类可以实现 AES 加密解密。下面是一个示例代码:
```java
public class Main {
public static void main(String[] args) throws Exception {
// 生成密钥
byte[] key = new byte[16]; // 16 字节的密钥
SecureRandom random = new SecureRandom();
random.nextBytes(key);
// 加密
byte[] data = "Hello, World!".getBytes();
byte[] encryptedData = AESUtils.encrypt(data, key);
// 解密
byte[] decryptedData = AESUtils.decrypt(encryptedData, key);
System.out.println(new String(decryptedData));
}
}
```
Java 中使用 RSA 与 AES 加密解密可以实现身份验证和加密,保护数据的安全。
2020-08-13 上传
2014-05-07 上传
2020-10-20 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
weixin_38747216
- 粉丝: 5
- 资源: 882
最新资源
- torch_spline_conv-1.2.1-cp37-cp37m-win_amd64whl.zip
- ember-socrata:与Socrata开放数据服务进行交互的适配器和序列化器
- ejb-rmi-test
- poke-rent
- wildberries
- ANNOgesic-1.0.13-py3-none-any.whl.zip
- time-profile:测量功能的执行时间
- ExcelVBA-AutoCompleteList:创建一个像自动完成这样的Google,以从列表中提取数据
- 端午节活动吃豆人游戏源代码
- JAVA获取音频时长jar包依赖.zip
- 印刷行业网站模版
- cnn-asl-recognizer:一种深度学习应用程序,它通过训练3层卷积神经网络以78%的精度识别手语中的数字0到5。 1080个训练样本。 120个测试样品。 64 x 64像素的图像。 基于吴安德(Andrew Ng)在Coursera上的深度学习专业
- SDJ2Z-A2
- mdnote.github.io:Free Online Markdown Note | 开源免费的在线 Markdown 记事本
- moteur-d-inference:这是在我的高等教育框架内开发的一个项目,其中包括使用开发语言 PYTHON 创建推理引擎
- oss-browser-win32-x64.zip