Java使用RSA和AES实现加密解密的详细实例代码
32 浏览量
更新于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 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
2021-01-20 上传
2020-08-25 上传
weixin_38747216
- 粉丝: 5
- 资源: 882
最新资源
- SSM动力电池数据管理系统源码及数据库详解
- R语言桑基图绘制与SCI图输入文件代码分析
- Linux下Sakagari Hurricane翻译工作:cpktools的使用教程
- prettybench: 让 Go 基准测试结果更易读
- Python官方文档查询库,提升开发效率与时间节约
- 基于Django的Python就业系统毕设源码
- 高并发下的SpringBoot与Nginx+Redis会话共享解决方案
- 构建问答游戏:Node.js与Express.js实战教程
- MATLAB在旅行商问题中的应用与优化方法研究
- OMAPL138 DSP平台UPP接口编程实践
- 杰克逊维尔非营利地基工程的VMS项目介绍
- 宠物猫企业网站模板PHP源码下载
- 52简易计算器源码解析与下载指南
- 探索Node.js v6.2.1 - 事件驱动的高性能Web服务器环境
- 找回WinSCP密码的神器:winscppasswd工具介绍
- xctools:解析Xcode命令行工具输出的Ruby库