RSA 加密 Java 实现
1. 简介
在计算机科学和密码学中,RSA 是一种非对称加密算法,被广泛用于安全通信和数据传输。它基于两个大质数的乘积难以分解,即通过已知的公钥无法推算出对应的私钥。本文将详细介绍如何使用 Java 实现 RSA 加密算法。
2. 流程图
使用 RSA 加密算法的过程大致如下所示:
journey
title RSA 加密流程
section 生成密钥对
用户 -> Java: 调用密钥生成器
Java -> 用户: 生成公钥和私钥
section 加密
用户 -> Java: 输入明文
Java -> 用户: 加密后的密文
section 解密
用户 -> Java: 输入密文
Java -> 用户: 解密后的明文
3. 代码实现
3.1 生成密钥对
首先,我们需要生成 RSA 密钥对,包括公钥和私钥。Java 提供了 KeyPairGenerator
类用于生成密钥对。
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
public class RSAEncryption {
public static void main(String[] args) {
try {
// 创建密钥对生成器
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
// 初始化密钥对生成器
keyPairGenerator.initialize(2048);
// 生成密钥对
KeyPair keyPair = keyPairGenerator.generateKeyPair();
// 获取公钥和私钥
PublicKey publicKey = keyPair.getPublic();
PrivateKey privateKey = keyPair.getPrivate();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
}
3.2 加密
加密过程是使用公钥对明文进行加密,生成密文。Java 提供了 Cipher
类用于加密操作。
import javax.crypto.Cipher;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
public class RSAEncryption {
public static void main(String[] args) {
try {
// 创建密钥对生成器
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
// 初始化密钥对生成器
keyPairGenerator.initialize(2048);
// 生成密钥对
KeyPair keyPair = keyPairGenerator.generateKeyPair();
// 获取公钥和私钥
PublicKey publicKey = keyPair.getPublic();
PrivateKey privateKey = keyPair.getPrivate();
// 创建加密器
Cipher cipher = Cipher.getInstance("RSA");
// 初始化加密器(使用公钥进行加密)
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
// 加密明文
byte[] plainText = "Hello, World!".getBytes();
byte[] cipherText = cipher.doFinal(plainText);
} catch (Exception e) {
e.printStackTrace();
}
}
}
3.3 解密
解密过程是使用私钥对密文进行解密,还原为明文。Java 提供了 Cipher
类用于解密操作。
import javax.crypto.Cipher;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
public class RSAEncryption {
public static void main(String[] args) {
try {
// 创建密钥对生成器
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
// 初始化密钥对生成器
keyPairGenerator.initialize(2048);
// 生成密钥对
KeyPair keyPair = keyPairGenerator.generateKeyPair();
// 获取公钥和私钥
PublicKey publicKey = keyPair.getPublic();
PrivateKey privateKey = keyPair.getPrivate();
// 创建加密器
Cipher cipher = Cipher.getInstance("RSA");
// 初始化加密器(使用公钥进行加密)
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
// 加密明文
byte[] plainText = "Hello, World!".getBytes();
byte[] cipherText = cipher.doFinal(plainText);
// 初始化加密器(使用私钥进行解密)
cipher.init(Cipher.DECRYPT_MODE, privateKey);
// 解密密文
byte[] decryptedText = cipher.doFinal(cipherText);