Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从PFX文件读取私钥,用该私钥解密密文_Java_Encryption_Rsa_Bouncycastle - Fatal编程技术网

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

Java 从PFX文件读取私钥,用该私钥解密密文,java,encryption,rsa,bouncycastle,Java,Encryption,Rsa,Bouncycastle,我正在尝试从受密码保护的PFX文件中获取私钥,并使用提取的私钥进行解密。尝试了以下代码,但获取了NullPointerException Security.addProvider(new BouncyCastleProvider()); PEMParser pemParser = new PEMParser(new InputStreamReader(new FileInputStream("..//pfx//pfx//BC_6.pfx"))); PEMEncrypted

我正在尝试从受密码保护的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的不同帖子

(PEMEncryptedKeyPair) pemParser.readObject()
因此,返回
null

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

  • 确保正确读取该值,使其不为
    null
  • 仅当对象的方法不同于
    null
  • 尝试处理异常

    • PEMParser PEMParser=新的PEMParser(新的InputStreamReader(新的文件InputStream(“..//pfx//pfx//BC_6.pfx”))

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

      所以(从我的头脑中输入,请不要介意小的打字错误/语法错误)


      哪一行负责您获得的NPE?在“PEMKeyPair PEMKeyPair=encryptedKeyPair.decryptKeyPair(decryptorProvider);”获取NPE。lineA PFX aka PKCS12文件不是PEM格式(通过查看可以看到),处理(某些)PEM格式的BC例程无法读取。然而,标准Java(JCE)和BC都可以将PKCS12作为密钥库处理。调用
      KeyStore.getInstance(“PKCS12”[,provider])
      并使用生成的对象加载PFX文件,然后从该对象获取密钥,所有这些都在
      KeyStore
      的javadoc中进行了解释。您如何知道返回的是null?也许下一条语句返回null。而且,你的回答非常笼统。
      InputStream in = ...
      KeyStore ks = KeyStore.getInstance("PKCS12");
      ks.load(in);