Java:实现RSA加密与验证的方法详解
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.Signature;
import java.util.Base64;
public class RSASample {
public static void main(String[] args) throws Exception {
// 生成RSA密钥对
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(2048);
KeyPair keyPair = keyPairGenerator.generateKeyPair();
// 公钥加密
String originalData = "需要加密的数据";
String encryptedData = encrypt(keyPair.getPublic(), originalData.getBytes());
System.out.println("加密数据: " + encryptedData);
// 私钥解密
byte[] decryptedData = decrypt(keyPair.getPrivate(), encryptedData);
System.out.println("解密数据: " + new String(decryptedData));
// RSA签名
byte[] dataToSign = originalData.getBytes();
String signature = sign(keyPair.getPrivate(), dataToSign);
System.out.println("签名: " + signature);
// 验证签名
boolean isValid = verify(keyPair.getPublic(), dataToSign, signature);
System.out.println("签名验证结果: " + isValid);
}
private static String encrypt(java.security.PublicKey publicKey, byte[] data) throws Exception {
// 加密逻辑...
// 返回Base64编码的加密数据
return Base64.getEncoder().encodeToString(encryptedData);
}
private static byte[] decrypt(java.security.PrivateKey privateKey, String encryptedData) throws Exception {
// 解密逻辑...
// 返回解密后的数据
return decryptedData;
}
private static String sign(java.security.PrivateKey privateKey, byte[] data) throws Exception {
Signature signature = Signature.getInstance("SHA256withRSA");
signature.initSign(privateKey);
signature.update(data);
return Base64.getEncoder().encodeToString(signature.sign());
}
private static boolean verify(java.security.PublicKey publicKey, byte[] data, String signature) throws Exception {
Signature sig = Signature.getInstance("SHA256withRSA");
sig.initVerify(publicKey);
sig.update(data);
return sig.verify(Base64.getDecoder().decode(signature));
}
}
这段代码展示了如何使用Java的KeyPairGenerator
、Signature
类以及Base64
编码来实现RSA加密、解密、签名和验证签名的过程。代码中的方法encrypt
和decrypt
用于模拟加密和解密操作,而sign
和verify
则用于生成签名和验证签名。这是一个简化的例子,实际应用中需要根据具体需求进行加密算法的选择和密钥管理。
评论已关闭