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格式的公钥文件,并使用KeyFactory
和X509EncodedKeySpec
类将公钥文件转换为PublicKey
对象。然后,我们使用Cipher
类进行RSA加密操作。
在实际应用中,您可以使用上面的示例代码将敏感数据加密,以确保数据的安全性。
总结
在本文中,我们介绍了如何使用RSA算法和PEM格式的公钥文件在Java中加密数据。通过使用Cipher
类和`KeyFactory