2013-02-17 18 views
15

弾む城:PEMReader => PEMParser

BC 1.46を使用して
-----BEGIN RSA PRIVATE KEY----- 
Proc-Type: 4,ENCRYPTED 
DEK-Info: AES-256-CBC,B9846B5D1803E..... 

などのPEM証明書では、私は次のコードで鍵ペアを抽出します、

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) 
    ..... 

今ちょうどインストールBC 1.48とPEMReaderは推奨されておらず、PEMParserに置き換える必要があります。

私の問題は、AFAIKはPEMParserにパスワードの場所がないことです。

私のコードをPEMParserバージョンに移行する方法を教えてもらえますか?

TIA

答えて

29

私はちょうど同じ問題を解決するために必要と何の答えが見つかりませんでした。 私はBC APIを勉強してくれて、私のために働く解決策を見つけました。 myFuncメソッドにpemStringパラメータの代わりにprivateKeyFileNameパラメータがあるように、私はプライベートキーをファイルから読み取る必要がありました。これは上記の解答に誤りであるならば、私はチェックしませんでした

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

:これまでのバージョン1.55 bcpkix-jdk15onの復号化コードの変更については

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); 
    } 
} 
+3

秘密鍵がPKCS#8形式である場合、オブジェクトはPrivateKeyInfoのインスタンスになります。 'converter.getPrivateKey((PrivateKeyInfo)object);' – gtrig

+1

Brilliantを使うと、廃止予定のBC 1.46 org.bouncycastle.openssl.PEMReaderクラスの使用方法を新しいPEMParserテクニックに適応させることができました。どうもありがとうございます! – Jeffro

+1

@xwatchこんにちは、輸入品を提供できますか? PEMParserクラスが見つかりません - MAVENを使用していて、この依存関係があります。 <! - https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk15on - > org.bouncycastle bcprov-jdk15on 1.56 はそれを動作させることはできません。 –

1

:BC 1.48とPEMParserを使用して

またはバージョン間のAPIの違いだけです。

関連する問題