Java使用RSA和AES实现加密解密的详细实例代码
157 浏览量
更新于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-10-20 上传
点击了解资源详情
2021-01-20 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
weixin_38747216
- 粉丝: 5
- 资源: 882
最新资源
- JHU荣誉单变量微积分课程教案介绍
- Naruto爱好者必备CLI测试应用
- Android应用显示Ignaz-Taschner-Gymnasium取消课程概览
- ASP学生信息档案管理系统毕业设计及完整源码
- Java商城源码解析:酒店管理系统快速开发指南
- 构建可解析文本框:.NET 3.5中实现文本解析与验证
- Java语言打造任天堂红白机模拟器—nes4j解析
- 基于Hadoop和Hive的网络流量分析工具介绍
- Unity实现帝国象棋:从游戏到复刻
- WordPress文档嵌入插件:无需浏览器插件即可上传和显示文档
- Android开源项目精选:优秀项目篇
- 黑色设计商务酷站模板 - 网站构建新选择
- Rollup插件去除JS文件横幅:横扫许可证头
- AngularDart中Hammock服务的使用与REST API集成
- 开源AVR编程器:高效、低成本的微控制器编程解决方案
- Anya Keller 图片组合的开发部署记录