By using SpongyCastle we can get good results. I made some code that will get the desired result. SpongyCastle Jars can be downloaded from below:- core, prov, pkix
import java.io.FileInputStream; import java.io.FileOutputStream; import java.security.PrivateKey; import java.security.Provider; import java.security.Security; // need core.jar, prov.jar, bcpkix-jdk15on.jar import org.spongycastle.asn1.ASN1Sequence; import org.spongycastle.asn1.pkcs.EncryptedPrivateKeyInfo; import org.spongycastle.asn1.pkcs.PrivateKeyInfo; import org.spongycastle.openssl.jcajce.JcaPEMKeyConverter; import org.spongycastle.openssl.jcajce.JceOpenSSLPKCS8DecryptorProviderBuilder; import org.spongycastle.operator.InputDecryptorProvider; import org.spongycastle.pkcs.PKCS8EncryptedPrivateKeyInfo; class Decrypt { private static void usage() { System.err.println(" Usage: encrypted.pk8 password out_decrypted.pk8"); System.exit(2); } public static byte[] copyOf(byte[] original, int newLength) { byte[] copy = new byte[newLength]; System.arraycopy(original, 0, copy, 0, Math.min(original.length, newLength)); return copy; } public static void loadProvider(String providerClassName) throws ClassNotFoundException, IllegalAccessException, InstantiationException { Class providerClass = Class.forName(providerClassName); Provider provider = (Provider)providerClass.newInstance(); // Security.insertProviderAt(provider, 1); Security.addProvider(provider); } public static void main(String[] args) throws Exception { if (args.length != 3) usage(); loadProvider("org.spongycastle.jce.provider.BouncyCastleProvider"); FileInputStream fis = new FileInputStream(args[0]); byte[] buff = new byte[fis.available()]; int len = fis.read(buff); fis.close(); // create what PEMParser would have ASN1Sequence derseq = ASN1Sequence.getInstance(copyOf(buff, len)); EncryptedPrivateKeyInfo epkInfo = EncryptedPrivateKeyInfo.getInstance(derseq); PKCS8EncryptedPrivateKeyInfo encobj = new PKCS8EncryptedPrivateKeyInfo(epkInfo); // decrypt and convert key InputDecryptorProvider decryptionProv = new JceOpenSSLPKCS8DecryptorProviderBuilder().build(args[1].toCharArray()); PrivateKeyInfo keyInfo = encobj.decryptPrivateKeyInfo(decryptionProv); JcaPEMKeyConverter converter = new JcaPEMKeyConverter().setProvider("SC"); PrivateKey key = converter.getPrivateKey(keyInfo); // now actually use key, this is just a dummy System.out.println(key.getAlgorithm()); FileOutputStream fos = new FileOutputStream(args[2]); fos.write(key.getEncoded()); fos.close(); } }