Java RSA 非对称加密算法实现

概述

在本文中,我将向你介绍如何在 Java 中使用 RSA 算法进行非对称加密。首先,我将为你展示整个过程的步骤,然后逐步解释每个步骤需要做什么,并提供相应的代码示例。

过程概览

下表列出了使用 RSA 算法进行非对称加密的基本步骤。

步骤 描述
生成密钥对 首先,我们需要生成一对公私钥。公钥用于加密数据,私钥用于解密数据。
加密数据 使用公钥对数据进行加密。
解密数据 使用私钥对加密后的数据进行解密。

现在让我们逐步了解每个步骤的细节。

生成密钥对

首先,我们需要生成一对公私钥。在 Java 中,我们可以使用 KeyPairGenerator 类来生成密钥对。

import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;

public class GenerateKeyPairExample {
    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();
            
            // 打印公钥和私钥
            System.out.println("Public Key: " + publicKey);
            System.out.println("Private Key: " + privateKey);
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
    }
}

上述代码中,我们首先通过 KeyPairGenerator.getInstance("RSA") 创建了一个 KeyPairGenerator 实例。然后,我们使用 initialize 方法指定密钥长度,这里我们选择了 2048 位。接下来,我们调用 generateKeyPair 方法生成密钥对。最后,我们使用 getPublicgetPrivate 方法获取公钥和私钥,并打印出来。

加密数据

一旦我们生成了密钥对,我们可以使用公钥对数据进行加密。在 Java 中,我们可以使用 Cipher 类来实现加密操作。

import java.nio.charset.StandardCharsets;
import javax.crypto.Cipher;
import java.security.KeyFactory;
import java.security.PublicKey;
import java.security.spec.X509EncodedKeySpec;
import java.util.Base64;

public class EncryptExample {
    public static void main(String[] args) {
        try {
            // 要加密的数据
            String data = "Hello, World!";
            
            // 获取公钥字符串(通常来自密钥对生成过程)
            String publicKeyString = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw1wOH4oYQp5oH5vJl4lH" +
                    "5qYVvwny+RD9iFgD7EwNJG7GQ8B3wC0P8rG9yDg1xuKuGqGKfEJwao5Vl7NVl0ju" +
                    "b/4ONGyfzBQg6QzQJ2X97OvqZKc4aY4f6JW1S3+YkEj0FY8adngNS+3wG6UnJbYD" +
                    "9Z4UqHUzlD6cdOG9+Yz28EagG3YQGpH07O3UgkFJ5XNzZB7aXBiWzd/7TftXrXBo" +
                    "vX9k6yO7nPw6qr7Rl1VXrMy2Lzqg1r2JW7L/VmGxVQXkWQwGdJ6cP6IuFz3GVNQH" +
                    "Uo6fR2M0YP+r1O6lqBiqWU1CZgC7e4d5noFmDehNh6yEr+pXPRgAIIYXJyhC4Y