Bouncy Castle: PEMReader => PEMParser

Con un certificato PEM come

-----BEGIN RSA PRIVATE KEY----- Proc-Type: 4,ENCRYPTED DEK-Info: AES-256-CBC,B9846B5D1803E..... 

usando BC 1.46, estrai la coppia di chiavi con il seguente codice:

 int myFunc(String pemString, char [] password) { ByteArrayInputStream tube = new ByteArrayInputStream(pemString.getBytes()); Reader fRd = new BufferedReader(new InputStreamReader(tube)); PEMReader pr = new PEMReader(fRd, new Password (password), "BC"); try { Object o = pr.readObject(); if (o instanceof KeyPair) ..... 

Ora ho appena installato BC 1.48 e mi dicono che PEMReader è deprecato e deve essere sostituito da PEMParser.

Il mio problema è, AFAIK, non c’è posto per una password in PEMParser.

Qualcuno potrebbe darmi un esempio su come migrare il mio codice su una versione di PEMParser?

TIA

Avevo solo bisogno di risolvere lo stesso problema e non ho trovato risposta. Così ho trascorso un po ‘di tempo a studiare BC API e ho trovato una soluzione che funziona per me. Avevo bisogno di leggere la chiave privata dal file in modo che ci sia parametro privateKeyFileName invece parametro pemString nel metodo myFunc.

Utilizzando BC 1.48 e PEMParser:

 int myFunc(String privateKeyFileName, char [] password) { File privateKeyFile = new File(privateKeyFileName); // private key file in PEM format PEMParser pemParser = new PEMParser(new FileReader(privateKeyFile)); Object object = pemParser.readObject(); PEMDecryptorProvider decProv = new JcePEMDecryptorProviderBuilder().build(password); JcaPEMKeyConverter converter = new JcaPEMKeyConverter().setProvider("BC"); KeyPair kp; if (object instanceof PEMEncryptedKeyPair) { System.out.println("Encrypted key - we will use provided password"); kp = converter.getKeyPair(((PEMEncryptedKeyPair) object).decryptKeyPair(decProv)); } else { System.out.println("Unencrypted key - no password needed"); kp = converter.getKeyPair((PEMKeyPair) object); } } 

Per la versione 1.55 di bcpkix-jdk15on il codice di decrittografia cambia in questo:

 kp = ((PEMEncryptedKeyPair) object).decryptKeyPair(decryptorProvider); 

Non ho verificato se si tratta di un errore nella risposta di cui sopra o solo una differenza API tra le versioni.