import java.io.FileInputStream;
import java.security.KeyFactory;
import java.security.PrivateKey;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.security.spec.PKCS8EncodedKeySpec;
import java.util.Base64;
public class PrivateKeyFromCertificate {
public static void main(String[] args) {
try {
// 1. 读取证书文件
FileInputStream certFileInputStream = new FileInputStream("path/to/your/certificate.cer");
FileInputStream privateKeyFileInputStream = new FileInputStream("path/to/your/private-key.pem");
// 2. 创建证书工厂并加载证书
CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
X509Certificate cert = (X509Certificate) certFactory.generateCertificate(certFileInputStream);
// 3. 提取私钥
PrivateKey privateKey = getPrivateKeyFromPEM(privateKeyFileInputStream);
// 4. 将私钥转换为字符串
String privateKeyString = convertPrivateKeyToString(privateKey);
// 5. 打印私钥字符串
System.out.println("Private Key as String:");
System.out.println(privateKeyString);
// 关闭文件输入流
certFileInputStream.close();
privateKeyFileInputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
// 从 PEM 格式的私钥文件中提取私钥
private static PrivateKey getPrivateKeyFromPEM(FileInputStream privateKeyInputStream) throws Exception {
byte[] privateKeyBytes = new byte[privateKeyInputStream.available()];
privateKeyInputStream.read(privateKeyBytes);
// 根据 PEM 格式的私钥字节数组构建私钥对象
String privateKeyPEM = new String(privateKeyBytes);
privateKeyPEM = privateKeyPEM.replace("-----BEGIN PRIVATE KEY-----", "");
privateKeyPEM = privateKeyPEM.replace("-----END PRIVATE KEY-----", "");
privateKeyPEM = privateKeyPEM.replaceAll("\n", "");
byte[] decodedPrivateKeyBytes = Base64.getDecoder().decode(privateKeyPEM);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(decodedPrivateKeyBytes);
return keyFactory.generatePrivate(keySpec);
}
// 将私钥转换为字符串
private static String convertPrivateKeyToString(PrivateKey privateKey) {
byte[] privateKeyBytes = privateKey.getEncoded();
return Base64.getEncoder().encodeToString(privateKeyBytes);
}
}
浙公网安备 33010602011771号