JAVA RSA加密实现
1. 流程概述
在实现JAVA RSA加密的过程中,我们需要进行以下几个步骤:
步骤 | 操作 |
---|---|
1 | 生成RSA密钥对 |
2 | 使用公钥进行加密 |
3 | 使用私钥进行解密 |
下面将逐步介绍每个步骤的具体操作和对应的代码。
2. 生成RSA密钥对
首先,我们需要生成RSA密钥对,其中包括公钥和私钥。公钥用于加密数据,私钥用于解密数据。
下面的代码演示了如何生成RSA密钥对:
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
public class RSAKeyPairGenerator {
public static void main(String[] args) {
try {
// 创建RSA密钥对生成器
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
// 初始化密钥对生成器,指定密钥长度
keyPairGenerator.initialize(2048);
// 生成RSA密钥对
KeyPair keyPair = keyPairGenerator.generateKeyPair();
// 获取公钥和私钥
PublicKey publicKey = keyPair.getPublic();
PrivateKey privateKey = keyPair.getPrivate();
System.out.println("公钥:" + publicKey);
System.out.println("私钥:" + privateKey);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
}
上述代码中,我们使用了KeyPairGenerator
类来生成RSA密钥对。在创建密钥对生成器时,我们需要指定加密算法为RSA,并通过initialize
方法设置密钥长度。在生成密钥对后,我们可以通过getPublic
方法获取公钥,通过getPrivate
方法获取私钥。
3. 使用公钥进行加密
生成RSA密钥对后,我们可以使用公钥对数据进行加密。下面的代码演示了如何使用公钥进行加密:
import java.nio.charset.StandardCharsets;
import java.security.KeyFactory;
import java.security.NoSuchAlgorithmException;
import java.security.PublicKey;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.X509EncodedKeySpec;
import javax.crypto.Cipher;
import java.util.Base64;
public class RSAEncryption {
public static void main(String[] args) {
try {
// 原始数据
String data = "Hello, RSA Encryption!";
// 公钥字符串
String publicKeyString = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzLZDQYjzpZjyYjGJX2eJ3hFfsQh5HvwcwOcQ+WhQYzW3YE8t6V2FdN7R5VocdZy1Pr9pBq2KfT3uX8gRq7reEBpXMTapcF4QeA0qma6qGBg0+V7vGZ3lM2FoBFPyRjMNCJCb3E7POaQe24vGF2n0RGVLkhWmJf0ya4p2QXGq9o1y//YFH6oQeUJnvOS4eNkttb3H6V8Y5HadrW2O8nU3irLlP7zWd+HXE7bvYm6Yq9LnmowGWznq3ZSTUQ9YrZUZu1ZRMaFmMFFVFYVj+Z1FqNI9Sv2kKfqtjJyfL26kZf+oloSxLbEiQX1a9sQHcTQFc9wYsF3XHOQGfZaVO+Wy5t3ZTYfZVQIDAQAB";
// 将公钥字符串解码为字节数组
byte[] publicKeyBytes = Base64.getDecoder().decode(publicKeyString);
// 创建X509EncodedKeySpec对象
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(publicKeyBytes);
// 创建KeyFactory对象,并指定加密算法为RSA
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
// 生成公钥对象
PublicKey publicKey = keyFactory.generatePublic(keySpec);
// 创建Cipher对象,指定加密算法为RSA
Cipher cipher = Cipher.getInstance("RSA");
// 初始化Cipher对象,设置