자바

2013-07-15 1 views
4

의 개인 암호화 키를 읽고 난 다음 코드 조각이 :자바

PEMParser pemParser; 
    File telexuskeys = new File(locationKey); 
    if(telexuskeys.exists()) 
     pemParser = new PEMParser(new FileReader(telexuskeys)); 
    else{ 
     usage(ops); 
     throw new FileNotFoundException("The key file (company's certificate) doesn't exist!"); 
    } 

    System.out.println("Loading company's certificate"); 

    Object object = pemParser.readObject(); 
    Object object2 = pemParser.readObject(); 

    PEMDecryptorProvider decProv = new JcePEMDecryptorProviderBuilder().build(passwordPem.toCharArray()); 
    JcaPEMKeyConverter converter = new JcaPEMKeyConverter().setProvider("BC"); 

    byte[] keyBytes = PrivateKeyInfo.getInstance(object2).getEncoded(); 
    PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(keyBytes); 
    KeyFactory kf = KeyFactory.getInstance("RSA", "BC");   
    PrivateKey pk = kf.generatePrivate(spec); 

내 PEM 파일이 단지 인증서와 개인 키가 있습니다. 이전에는 파일을 읽고 개인 키를 구할 수 있었지만 이제 파일은 암호로 보호 (암호화)됩니다. 내가 아직 실종 상태 인 지시는 무엇인가. 그것을 얻으려면 PEMDecryptorProvider 및 JcaPEMKeyConverter 개체를 사용해야하지만 올바른 조합을 찾지 못했습니다.

답변

2

다음 코드는 저에게 도움이됩니다. (Bouncy Castle의 bcpkix 및 bcprov 라이브러리 사용).

private PrivateKey readPrivateKey(String privateKeyPath, String keyPassword) throws IOException { 

    FileReader fileReader = new FileReader(privateKeyPath); 
    PEMParser keyReader = new PEMParser(fileReader); 

    JcaPEMKeyConverter converter = new JcaPEMKeyConverter(); 
    PEMDecryptorProvider decryptionProv = new JcePEMDecryptorProviderBuilder().build(keyPassword.toCharArray()); 

    Object keyPair = keyReader.readObject(); 
    PrivateKeyInfo keyInfo; 

    if (keyPair instanceof PEMEncryptedKeyPair) { 
     PEMKeyPair decryptedKeyPair = ((PEMEncryptedKeyPair) keyPair).decryptKeyPair(decryptionProv); 
     keyInfo = decryptedKeyPair.getPrivateKeyInfo(); 
    } else { 
     keyInfo = ((PEMKeyPair) keyPair).getPrivateKeyInfo(); 
    } 

    keyReader.close(); 
    return converter.getPrivateKey(keyInfo);