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);