从PFX文件中读取私钥,使用该私钥解密密文

时间:2017-12-26 11:18:10

标签: java encryption rsa bouncycastle

我尝试从受密码保护的PFX文件中获取私钥,并在提取的私钥的帮助下进行解密。请使用以下代码,但获取NullPointerException

    Security.addProvider(new BouncyCastleProvider());
    PEMParser pemParser = new PEMParser(new InputStreamReader(new FileInputStream("..//pfx//pfx//BC_6.pfx")));
    PEMEncryptedKeyPair encryptedKeyPair = (PEMEncryptedKeyPair) pemParser.readObject();
    PEMDecryptorProvider decryptorProvider = new JcePEMDecryptorProviderBuilder().build("test123".toCharArray());
    PEMKeyPair pemKeyPair = encryptedKeyPair.decryptKeyPair(decryptorProvider);

    JcaPEMKeyConverter converter = new JcaPEMKeyConverter().setProvider("BC");
    System.out.println(" Private Key --->  "+converter.getPrivateKey(pemKeyPair.getPrivateKeyInfo()));

输出是,

Exception in thread "main" java.lang.NullPointerException
at com.test.obfuscate.EncryptionUtil.main(EncryptionUtil.java:40)

请在此建议,过去一周坚持这一点。试过StackOverflow的不同帖子。

2 个答案:

答案 0 :(得分:1)

PEMParser pemParser = new PEMParser(new InputStreamReader(new FileInputStream("..//pfx//pfx//BC_6.pfx")));

您是否尝试将PFX文件读取为PEM文件? PFX文件实际上是PKCS12密钥库。

所以(从我的头脑打字,请不要小心小错别字/语法错误)

InputStream in = ...
KeyStore ks = KeyStore.getInstance("PKCS12");
ks.load(in);

答案 1 :(得分:0)

(PEMEncryptedKeyPair) pemParser.readObject()

返回null,因此

encryptedKeyPairnull,您无法调用其方法。确保您执行以下一项或多项操作:

  • 确保您正确阅读了该值,因此它不是null
  • 仅在与null
  • 不同的情况下调用对象的方法
  • try - catch处理例外