2013-03-27 402 views
1

我有一個PEM密鑰,我想獲得一個KeyPair與它和bouncycastle。我發現這個代碼似乎很好,但我有一個演員異常。從PEM密鑰獲取KeyPair與BouncyCastle

function loadKey() { 
    File privateKeyFile = new File(keyPath); 
    PEMParser pemParser = new PEMParser(new FileReader(privateKeyFile)); 
    PEMDecryptorProvider decProv = new  JcePEMDecryptorProviderBuilder().build(password.toCharArray()); 
    JcaPEMKeyConverter converter = new JcaPEMKeyConverter().setProvider("BC"); 

    Object object = pemParser.readObject(); 
    KeyPair kp; 

    if (object instanceof PEMEncryptedKeyPair) { 
     Logger.info("Encrypted key - we will use provided password"); 
     kp = converter.getKeyPair(((PEMEncryptedKeyPair) object).decryptKeyPair(decProv)); 
    } 
    else { 
     Logger.info("Unencrypted key - no password needed");  
     kp = converter.getKeyPair((PEMKeyPair) object); 
    } 

    return kp; 
} 

,並返回我: 未加密的密鑰 - 無需 org.bouncycastle.asn1.x509.SubjectPublicKeyInfo不能轉換到org.bouncycastle.openssl.PEMKeyPair

我試了好幾種方法,但我的密碼沒有成功。

感謝幫助我:)

+0

您確定您所引用的PEM是私鑰嗎?我沒有任何困難地使用相同的方法。 – 2013-03-27 12:24:10

+0

我不確定,我是一個帶鍵的新手。我怎麼能知道它? – user2119056 2013-03-27 12:41:55

+1

基於你遇到的錯誤,聽起來好像你在解密證書而不是私鑰。 – 2013-03-27 13:41:02

回答

6

如果你有密碼,你可能會得到這個異常的私鑰。嘗試刪除密碼:

openssl rsa -in /path/to/originalkeywithpass.key -out /path/to/newkeywithnopass.key