2011-04-13 3 views
1

외부 파일 (병 내부)을 안전하게 저장할 수있는 방법이 있습니까? Java 파일은 .class 파일로 컴파일되고 읽을 수는 없습니다.텍스트 파일을 안전하게 JAR에 저장

나는이 meganism을 사용하여 쿼리를 보관하는 SQL 파일을 저장할 계획이지만, jar 파일을 추출 할 때 읽을 수 있도록하고 싶지는 않습니다. 외부 파일은 사전이므로 우리가 구문 강조를 문자열에 넣는 대신 개발하는 동안 발생합니다.

+2

jar가 보유하고있는 코드에서 해당 sql 파일을 사용하면 안전하게 만들 수 없습니다. 유일한 방법은 일부 키를 사용하여 암호화하는 것이기 때문에 SQL 파일을 읽는 코드는 해당 키와 Java 디버거를 사용하여 액세스 할 수있는 키를 알아야합니다. – khachik

+0

FYI - 클래스 파일 코드를 읽을 수있는 디 컴파일러가 있습니다. JD-GUI를 참조하십시오. 클래스 파일이기 때문에 읽을 수 없게 만듭니다. – Sean

답변

2

jar 파일은 대부분 .zip 파일이기 때문에 원하는 파일을 넣을 수 있습니다. 내장 된 암호화가 없으므로 SQL 파일을 읽을 수 없도록 만들려고하면 암호화 한 다음 코드에서 암호화를 해제해야합니다. "외부 파일은 사전입니다. 왜냐하면 문자열을 입력하는 대신 개발하는 동안 구문 강조를 사용하기 때문입니다."

+0

클래스 안에 넣으면 문제가 해결되지만, 문자열 내부에서 구문 강조가 없으므로 이전에 대한 인용 부호를 모두 사용해야하므로 쉽게 읽을 수 없습니다. – ferdyh

+0

@Ferdy : 클래스 내부에 문자열을 넣어 문제를 해결하면 (예 : 디버거와의 대결이 아닌) SQL 파일 (AES, Blowfish)을 암호화하고 애플리케이션을 시작할 때 해독 할 수 있습니다. – khachik

1

예, 사람들은 항상이 작업을 수행합니다. 항아리에 파일을 추가 한 다음

getResourceAsStream으로 액세스하면됩니다. Maven으로 빌드하면 src/main/resources에 그 파일들을 올려 놓기 만하면됩니다.

1

물론 Jar에 넣을 수 있습니다. 일단 거기에 도착하면 ClassLoader의 getResourceAsStream 메소드를 사용할 수 있습니다.

도전 과제는 다른 사람들이 추출하는 것을 방지하는 것입니다. 코드가이를 읽을 수 있다면 다른 사람도 읽을 수 있습니다. 여기에 귀하의 요구 사항은 무엇입니까?

+0

항아리 안의 파일을 가져 오는 것이 문제가되지 않습니다 ... 항아리를 추출하는 사람들이 그 항아리를 읽을 수 없기를 바랍니다. – ferdyh

+0

메모장에서 .class 파일을 열어 보았습니까? 모든 문자열 값을 똑바로 읽을 수 있습니다. 디버거가 필요하지 않습니다. –

+0

@Ferdy "읽을 수 없음"은 불가능합니다. 그러나 당신은 그것을 힘들게 만들 수 있습니다. 문제는 다른 사람들에게 힘들 때도 당신에게 어려울 수 있다는 것입니다. –

관련 문제