문제

Java에서 프로그램 실행 사이에 데이터를 저장하는 가장 좋은 방법은 무엇입니까? 이미 텍스트 파일을 사용하고 정보를 저장할 수 있다는 것을 알고 있지만 프로그램 실행 사이에 프로그램에서 생성 된 정보를 저장하는 더 좋은 방법이 있는지 궁금합니다.

또한 정보를 안전하게 유지할 수있는 방법이 있습니까? 구체적으로, 최종 사용자가 액세스 할 수 없게 유지하고 싶습니다.

도움이 되었습니까?

해결책

프로그램 실행 사이에 프로그램에 의해 생성 된 정보를 배치하는 다른 방법이 있는지 궁금합니다.

간단히 사용하십시오 ObjectOutputStream 파일과 an으로 직렬화합니다 ObjectInputStream 다시 얻기 위해.

또한 정보를 안전하게 유지할 수있는 방법이 있습니까? 최종 사용자로부터 액세스 할 수 있습니까?

코드가 최종 사용자의 시스템에서 실행되면 아니요, 데이터를 얻지 못하게하는 방법이 없습니다. 디버거를 첨부하고 프로그램의 상태를 검사하기가 쉽기 때문에 어떻게 든 인코딩하는 데 시간의 가치가 없습니다. 달리기. 이진 형식으로 Java Serialization은 비 기술적 사용자가 해독하는 것을 방해 할 것이며, 이는 당신이 기대할 수있는 최선입니다.

다른 팁

나는 그것을 직접 사용한 적이 없지만 그것이 JDK의 java.util.prefs.preferences 원래 설계되었습니다.

당신이 사용할 수있는 속성 정보 저장을 위해. 안전하게 만들고 싶다면 일종의 종류를 통해 실행하십시오. 암호화 스트림.

파일의 암호화 또는 비밀번호가있는 로컬 데이터베이스.

당신은 사용할 수 있습니다 DB4O 데이터를 저장합니다. 객체 데이터베이스이며 암호화를 지원합니다.

당신은 관심이있을 수 있습니다 Java에 대한 빠른 끈기.

어떤 사람들은 직렬화를 사용하도록 제안했습니다. 직렬화에는 많은 단점이 있음을 조심하십시오.

  • 버전화 문제. 직렬화 된 클래스에서 무언가를 변경하면 이전 버전의 프로그램으로 작성된 직렬화 된 파일을 더 이상 쉽게 읽을 수 없습니다.
  • 정확한 파일 형식을 모릅니다. 나중에 다른 프로그래밍 언어로 다른 프로그램을 작성하려면 파일을 읽어야한다면 정말 어려울 것입니다.

직렬화는 장기 저장에 적합하지 않습니다.

대신 작은 내장 데이터베이스를 사용하는 것이 좋습니다. (임베디드 데이터베이스는 프로그램과 동일한 프로세스에서 실행되는 데이터베이스입니다). Sun의 Java에는 포함됩니다 Java DB, Apache Derby의 버전입니다. 또한 있습니다 HSQLDB, 이는 임베디드 데이터베이스로 사용할 수있는 또 다른 작고 순수한 Java 데이터베이스입니다.

Java를 시작할 때 사용하는 가장 좋은 방법은 ObjectOutputStream 또는 텍스트 파일을 사용하는 것입니다. 더 많은 경험이 있으면 데이터베이스를 사용할 수 있습니다.

직렬화는 어떻습니까?

사용자가 읽을 수 없으며 비교적 쉽습니다.

다른 사람들이 말했듯이, 데이터 직렬화 방법에는 수많은 방법이 있습니다. SQLITE와 같은 가벼운 것을 사용할 수 있습니다. 데이터를 암호화하려는 시도는 특히 Java 코드의 경우 쉽게 반전 될 수 있으므로 패배 할 수 있음을 인식하십시오.

그러나 대부분의 사용자가 리버스 엔지니어링의 복잡성을 이해하기에 충분히 기술적이지 않은 경우 데이터를 해독하는 방법을 파악하기 위해 Java 프로그램의 복잡성을 이해할 수있는 경우 다른 답변에 언급 된 것과 같은 기본 암호화 방법을 벗어날 수 있어야합니다. 그리고 좋다. 제어 할 수없는 기계에 어떤 것이든지 상주 할 때마다 가장 지속적인 사용자가 크래킹 방법을 알아 내지 못하게 할 수있는 방법이 없다는 것을 깨달으십시오.

개인적으로 SQLITE를 사용하고 필드에 넣은 데이터에 간단한 암호화를 사용하는 것이 좋습니다. 누군가가 로컬 DB 파일에 연결할 수있을 정도로 똑똑하다면 여전히 암호화 알고리즘을 역전시켜야합니다. 일반 사용자의 99.9%가 이러한 수준의 조사를 방해하지 않습니다.

직렬화 기술로서의 XML은 객체 직렬화와 같은 이진 형식보다 스토리지를 조정하는 프로그램의 향후 변화에 더 탄력적입니다. 그러나 대부분의 사용자가 읽기 쉽고 변경할 수 있습니다.

매우 간단한 압축/감압은 거의 모든 사용자가 데이터의 실제 내용을 얻지 못하게합니다. 현재 작문 스트림에 GzipinputStream/gzipoutputStream을 사용하면 작업을 수행합니다. Prying에 대한 방어를 더 정교하게 만들수록 소프트웨어 사용자에게 더 많은 영향을 줄 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top