使用RSA公钥加密数据

在Java中,RSA(Rivest-Shamir-Adleman)是一种非对称加密算法,它可以用于加密和解密数据。在RSA加密中,公钥用于加密数据,私钥用于解密数据。本文将介绍如何使用已知的RSA公钥来加密数据。

RSA公钥加密原理

RSA公钥加密的原理很简单:首先生成一对公私钥,将公钥分发给需要加密数据的用户,用户使用公钥加密数据,只有持有私钥的用户才能解密数据。

代码示例

下面是一个简单的Java示例代码,演示如何使用已知的RSA公钥来加密数据:

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

public class RSAEncryption {
    public static String encrypt(String publicKeyString, String data) throws Exception {
        byte[] publicKeyBytes = Base64.getDecoder().decode(publicKeyString);
        X509EncodedKeySpec keySpec = new X509EncodedKeySpec(publicKeyBytes);
        KeyFactory keyFactory = KeyFactory.getInstance("RSA");
        PublicKey publicKey = keyFactory.generatePublic(keySpec);

        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.ENCRYPT_MODE, publicKey);

        byte[] encryptedBytes = cipher.doFinal(data.getBytes());
        return Base64.getEncoder().encodeToString(encryptedBytes);
    }

    public static void main(String[] args) throws Exception {
        String publicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqvJvYTiT..."; // 替换为实际的公钥
        String data = "Hello, RSA!";

        String encryptedData = encrypt(publicKey, data);
        System.out.println("Encrypted data: " + encryptedData);
    }
}

甘特图

gantt
    title RSA公钥加密流程
    section 生成密钥对
    生成密钥对       :done, 2022-01-01, 1d
    section 加密数据
    获取公钥       :done, after 1d, 1d
    加密数据       :active, after 1d, 1d
    section 解密数据
    获取私钥       :done, after 2d, 1d
    解密数据       :after 1d , 1d

饼状图

pie
    title RSA公钥加密数据分布
    "已加密数据" : 70
    "未加密数据" : 30

通过以上代码示例和图表,我们可以清楚地了解如何使用已知的RSA公钥加密数据。希朇本文能对您有所帮助。