实现代码
/**
* getPvkformPfx: 从PFX文件中获取私钥
* @param strPfx 文件存储目录
* @param strPassword PFX密码
*/
private static PrivateKey getPvkformPfx(String strPfx, String strPassword){
try {
FileInputStream fis = new FileInputStream(strPfx);
//密码处理
char[] nPassword = null;
if ((strPassword == null) || strPassword.trim().equals("")){
nPassword = null;
} else {
nPassword = strPassword.toCharArray();
}
//加载读取PFX文件
KeyStore ks = KeyStore.getInstance("PKCS12");
ks.load(fis, nPassword);
fis.close();
Enumeration enumas = ks.aliases();
//从文件中获取秘钥
String keyPFXFile = null;
if (enumas.hasMoreElements()) {
keyPFXFile = (String)enumas.nextElement();
}
PrivateKey prikey = (PrivateKey) ks.getKey(keyPFXFile, nPassword);
Certificate cert = ks.getCertificate(keyPFXFile);
PublicKey pubkey = cert.getPublicKey();
System.out.println("cert class = " + cert.getClass().getName());
System.out.println("cert = " + cert);
System.out.println("public key = " + pubkey);
System.out.println("private key = " + prikey);
BASE64Encoder bse = new BASE64Encoder();
System.out.println("private encode = " + bse.encode(prikey.getEncoded()));
return prikey;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
测试实例
public static void main(String args[]){
String keyStorefile = "D:\\test\\private.pfx";
String keyPassword = "12345678";
getPvkformPfx(keyStorefile,keyPassword);
}
结果: