Java 将私钥从pem文件导入密钥库

Java 将私钥从pem文件导入密钥库,java,keystore,Java,Keystore,我在使用密钥库方面是新手,当我有cert文件和pem格式的私钥时,有没有办法创建密钥库?请帮忙 keyStore = KeyStore.getInstance("PKCS12"); keyStore.load(null, pwd.toCharArray()); String privKeyPEM= privateKey.replace("-----BEGIN RSA PRIVATE KEY-----\r\n",""); privKeyPEM = privKeyPEM.

我在使用密钥库方面是新手,当我有cert文件和pem格式的私钥时,有没有办法创建密钥库?请帮忙

   keyStore = KeyStore.getInstance("PKCS12");

   keyStore.load(null, pwd.toCharArray());

   String privKeyPEM= privateKey.replace("-----BEGIN RSA PRIVATE KEY-----\r\n","");
   privKeyPEM = privKeyPEM.replace("\r\n-----END RSA PRIVATE KEY-----","");
   byte [] encoded = Base64.decode(privKeyPEM);
   PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(encoded);
   KeyFactory kf = KeyFactory.getInstance("RSA");
   PrivateKey privKey = kf.generatePrivate(keySpec);
它在这里失败
kf.generatePrivate(keySpec)
。 我得到:

algid parse error, not a sequence.
代码的其余部分:

   KeyStore.PrivateKeyEntry entry = new KeyStore.PrivateKeyEntry(privKey, new Certificate[ {certificate});
   keyStore.setEntry(keyStoreAlias,entry , new KeyStore.PasswordProtection(pwd.toCharArray()));

好的,经过一些研究,我最终得到了这段代码,这段代码对我来说非常有效。所以,我把它贴在这里,以防有人在寻找相同的解决方案

        KeyStore keystore;

        java.security.Security.addProvider(
                new org.bouncycastle.jce.provider.BouncyCastleProvider()
        );

        PEMParser pemParser = new PEMParser(new StringReader(privateKey));
        Object object = pemParser.readObject();
        PEMDecryptorProvider decProv = new JcePEMDecryptorProviderBuilder().build(pwd.toCharArray());
        JcaPEMKeyConverter converter = new JcaPEMKeyConverter().setProvider("BC");
        KeyPair kp;
        if (object instanceof PEMEncryptedKeyPair) {
            kp = converter.getKeyPair(((PEMEncryptedKeyPair) object).decryptKeyPair(decProv));
        } else {
            kp = converter.getKeyPair((PEMKeyPair) object);
        }
        RSAPrivateKey result = (RSAPrivateKey)kp.getPrivate();

        keystore= KeyStore.getInstance("pkcs12");
        keystore.load(null, pwd.toCharArray());
        keystore.setKeyEntry(keyStoreAlias, result, pwd.toCharArray(), new Certificate[]{certificate});

感谢所有建议解决方案或提出问题的人。

您是想在运行时创建密钥存储库,还是一个相当静态的设置?它将是一种虚拟密钥存储库。我不知道我是否也正确导入了证书。这可能是因为我使用的是pkcs12,私钥定义为pkcs8?但是我不知道如何编程请告诉我们
证书
来自何处。您不能像keytool-import-file yourcert.pem.x509-keystore MyLocalKeystore-storepass****一样从命令行导入它吗?