RSA 公钥加密与 Java

RSA,即 Rivest-Shamir-Adleman,是一种非对称加密算法,常用于加密和数字签名。在RSA算法中,公钥用于加密数据,私钥用于解密数据。在本文中,我们将介绍如何使用RSA算法和PEM格式的公钥文件在Java中加密数据。

什么是PEM格式公钥文件

PEM(Privacy Enhanced Mail)是一种用于存储加密和认证信息的标准格式。PEM格式的公钥文件通常以.pem.pub为扩展名,用于存储公钥信息。

PEM格式的公钥文件通常包含以下信息:

  • 公钥的算法类型(如RSA)
  • 公钥的模数(Modulus)
  • 公钥的指数(Exponent)

在Java中使用RSA公钥加密数据

在Java中,我们可以使用java.security包提供的Cipher类来进行RSA加密操作。下面是一个简单的示例代码,演示了如何使用RSA公钥加密数据:

import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.security.KeyFactory;
import java.security.PublicKey;
import java.security.spec.X509EncodedKeySpec;
import javax.crypto.Cipher;

public class RSAEncryption {

    public static byte[] encrypt(String publicKeyFile, String data) throws Exception {
        byte[] publicKeyBytes = Files.readAllBytes(Paths.get(publicKeyFile));
        X509EncodedKeySpec keySpec = new X509EncodedKeySpec(publicKeyBytes);
        KeyFactory keyFactory = KeyFactory.getInstance("RSA");
        PublicKey publicKey = keyFactory.generatePublic(keySpec);

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

        return cipher.doFinal(data.getBytes(StandardCharsets.UTF_8));
    }

    public static void main(String[] args) throws Exception {
        String publicKeyFile = "public_key.pem";
        String data = "Hello, World!";
        
        byte[] encryptedData = encrypt(publicKeyFile, data);
        // Do something with encrypted data
    }
}

在上面的代码中,我们定义了一个RSAEncryption类,其中包含一个encrypt方法用于RSA加密。在main方法中,我们加载公钥文件并调用encrypt方法加密数据。

PEM公钥文件示例

以下是一个示例的PEM公钥文件内容:

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzVt2t5zO9UR1cC7UaQJ9
418FPYs3jYQ9knHv985Bl1rUhcPw1j2a0NRv1WnZzR3QdF5O9qOeYkzTMkQZ+9iV
1MnW7jC3bYt7BnQlUzkaS0Kh8rAkfvsRkRQYa7YuhzQX2YsX1JwD7vXN1XfT3Z2
NtUHNUaR5nJQnI+3DFOfZctDjxLZ4VUwb9rK3Ae7E+RkF3V8pA2nK6m1QsGF3rY
6f99v3mXXzH5s3MqCT6le4fUK9wS+g8aXUy7vKgTz+YbXrDgKBrK8zVp4i2Lk3v
QX1SnQ6RfzeYFXyGpVHx8b2lZ0v1XQsWB8fx4Dg9MC2AuQ9itmSt7nKzVMXs5Gf
PQIDAQAB
-----END PUBLIC KEY-----

代码说明

在上面的示例代码中,我们首先读取PEM格式的公钥文件,并使用KeyFactoryX509EncodedKeySpec类将公钥文件转换为PublicKey对象。然后,我们使用Cipher类进行RSA加密操作。

在实际应用中,您可以使用上面的示例代码将敏感数据加密,以确保数据的安全性。

总结

在本文中,我们介绍了如何使用RSA算法和PEM格式的公钥文件在Java中加密数据。通过使用Cipher类和`KeyFactory