세션 키를 암호화하는 방법을 쓰고 있습니다. 키가 성공적으로 테스트 된 다른 프로그램에 의해 해독 될 수 있도록이 작업을 수행해야합니다. 암호 해독 프로그램은 변경할 수 없습니다. 내가 꼼짝 못하는 부분은 암호 해독 루틴과 일치하는 방식으로 작동하도록 내 암호화를 얻는 것입니다.세션 키의 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;
}
정말 고생했습니다. 어떤 도움을 주셔서 감사합니다. 고맙습니다.
[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