2014-04-16 4 views
1

세션 키를 암호화하는 방법을 쓰고 있습니다. 키가 성공적으로 테스트 된 다른 프로그램에 의해 해독 될 수 있도록이 작업을 수행해야합니다. 암호 해독 프로그램은 변경할 수 없습니다. 내가 꼼짝 못하는 부분은 암호 해독 루틴과 일치하는 방식으로 작동하도록 내 암호화를 얻는 것입니다.세션 키의 OpenSSL 암호화

우선 암호 해독 루틴을 알려 드리겠습니다. 다음은 변경할 수 없음을 기억하십시오.

public Boolean decryptSessionKey() { 

    // first, base64 decode the session key 
    String sslString = "openssl base64 -d -in enc_sesskey -out temp"; 

    try { 
     Process p = Runtime.getRuntime().exec(sslString); 
    } catch (IOException e2) { 
     e2.printStackTrace(); 
    } 

    // now we can decrypt it 
    try { 
     sslString = "openssl rsautl -in temp -inkey privkey.pem -decrypt"; 
     Process p = Runtime.getRuntime().exec(sslString); 
     BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream())); 

     try { 
      String s; 
      while ((s = stdInput.readLine()) != null) {   
       decrypted_session_password = s; 
       writeToFile(decrypted_sesskey, s); 
      } 
      return true; 

     } catch (Exception e) { 
      return false; 
     } 
    } catch (IOException e1) { 
     return false; 
    } catch (Exception e) { 
     return false; 
    } 
} 

내가 작성한 암호화 루틴은 다음과 같습니다. base64로 인코딩 된 텍스트를 산출하지만 궁극적으로 해독 할 수 없습니다. 암호 해독 루틴이 암호화 루틴의 결과를 올바르게 가져 왔음을 확인했습니다 (둘 사이의 핸드 셰이크 문제 없음).

public Boolean encryptSessionKey(Cert receiver_cert) { 

    String sslString = 
     "openssl rsautl base64 -in sesskey -out temp -inkey cert.pem -encrypt -certin"; 

    // run this openssl encryption. Note that it will not yet be base64 encoded 
    try { 
     Process p = Runtime.getRuntime().exec(sslString); 
    } catch (IOException e2) { 
     e2.printStackTrace(); 
    } 

    // now we base64-encode the encrypted file 
    sslString = "openssl base64 -in temp -out enc_sesskey"; 

    try { 
     Process p = Runtime.getRuntime().exec(sslString); 
    } catch (IOException e1) {return false; 
    } catch (Exception e) {return false; 
    } 

    return true; 
} 

정말 고생했습니다. 어떤 도움을 주셔서 감사합니다. 고맙습니다.

+0

[Java에서 RSA 키를 사용하여 암호를 해독하는 방법] (https://stackoverflow.com/q/10517930/608639), [Java의 OpenSSL 명령과 동일] (https://stackoverflow.com/q)을 참조하십시오./39084741/608639), [Java에서 RSA 키를 사용하여 암호를 해독하는 방법] (https://stackoverflow.com/q/10517930/608639), [OpenSSL 세션 키 암호화] (https://stackoverflow.com/q/23114808/608639). – jww

답변

1
PKCS 패딩 및 인증서에서 획득 한 공개 키와

RSA 암호화 :

openssl rsautl -encrypt -in sesskey -inkey cert.pem -certin -out temp 
openssl base64 -e -in temp -out enc_sesskey 
PKCS 패딩 및 개인 키와

RSA 암호 해독 :

openssl base64 -d -in enc_sesskey -out temp 
openssl rsautl -decrypt -in temp -inkey privkey.pem -out sesskey2 

테스트 및 확인이 확인 될 내용 때문에 " sesskey "파일의 내용은"sesskey2 "파일의 내용과 동일합니다.

+0

감사합니다! 매우 감사. – Alex