2013-07-04 5 views
7

프로그램 데이터를 텍스트 파일로 저장하는 일반적인 방법을 알고 있습니다. 문제는 누구나 텍스트 파일에 액세스 할 수 있고 조작 할 수 있다는 것입니다. 예를 들어 게임을 진행하면서 변경되는 게임 데이터를 저장하고로드하고 싶습니다. 그러한 데이터를 저장하고 게임 프로그램 내에서만 액세스 가능하게 유지하여 다른 사람들이 조작하지 못하도록하는 방법은 무엇입니까?데이터 저장 및 로딩 C++

+0

균열 보호에서와 같이? –

+0

게임의 레벨 편집기와 같습니다. 새 레벨 데이터는 저장되며 게임 프로그램 자체에서만 액세스 할 수 있습니다. – starhacker

답변

6

데이터를 이진 파일로 저장해야합니다. 그러나 사람들은 여전히 ​​어쨌든 (나는 종종 Diablo2 : D에서 내 캐릭터의 스킬 포인트 또는 스탯 포인트를 변경하는 것처럼) 해시 합을 계산하고 데이터 내에 저장하는 알고리즘을 찾아야합니다.

3

이진 파일에 데이터를 저장할 수 있습니다. C++ 객체에서 비트를 쓰고 읽습니다.

+0

나는 파일을 보호하려고하는 사람들이 바이너리 파일을 변환하는 방법을 알아낼 수 있다고 확신한다. 아니? – ChiefTwoPencils

+0

글쎄, 어떻게 데이터가 쓰여질 지 모르겠다. 그가 쓰고 자하는 데이터가 2 int와 10 문자 스트링을 포함하는 구조라면 파일이 sizeof (int) + sizeof (int) + 10 * sizeof (char) 바이트가 될 것이라고 생각합니다. 그리고 만약 그것이 그의 물체에 던져진다면 그것이 의미가있는 유일한 방법이 될 것입니다. – bathtub

+0

내가 말하는 것은 @DzungAh이 그 대답에서 말한 것과 유사합니다. 바이너리 파일에 데이터를 저장하는 것은 그 자체로 훌륭한 해결책은 아닙니다. 그것은 여전히 ​​편집 가능할 것입니다 ... – ChiefTwoPencils

8

아이디어는 데이터를 사람이 읽을 수 없도록 포맷하는 것입니다. 이것은 여러 가지 방법을 사용하여 수행 할 수 있습니다.

  • 데이터를 바이너리로 저장하십시오. 이렇게하면 사람이 파일을 읽기가 어려워 지므로 16 진수 편집기 나 유사한 프로그램을 사용해야합니다. 또한 하나의 값이 끝나는 곳과 다른 값이 시작되는 곳을보기 어렵게 만듭니다 (텍스트 파일에서 공백으로 표시됨). 이것의 또 다른 장점은 파일이 훨씬 작아진다는 것입니다.
  • 데이터 암호화. 데이터는 다양한 방법을 사용하여 암호화 할 수 있습니다. 이것은 매우 안전한 옵션이지만 암호화가 느릴 수 있으므로 대용량 데이터의 경우 데이터 저장 /로드 속도에 따라 최적화되지 않을 수 있습니다. 또한 암호화/암호 해독 키를 어딘가에 저장하는 문제가있을 수 있습니다 (파일 자체 또는 프로그램의 상수로 저장할 수도 있음).
  • 난독 화. 이것은 읽기 어렵게 만드는 것을 일컫는 광범위한 용어입니다. 예를 들어 두 문자열을 모두 읽을 수 없도록하기 위해 인터레이스 될 수 있습니다. 난독 화 (obfuscation)는 종종 정크 데이터 할당량, 프로그램에서 사용하지 않는 정보를 삽입하고 해커가되는 것을 혼동하는 역할을합니다.
  • 유효성 검사. 누군가가 파일을 수정하고 자신이하는 일을 모르는 경우 프로그램에 눈에 보이는 영향을 줄 가능성이 큽니다. 이 방법으로 파일을 간단히 조작하여 프로그램이 어떻게 반응하는지 확인할 수 있습니다. 이 문제를 해결하는 한 가지 방법은 모든 데이터가 논리적 범위 내에 있는지 확인하는 것입니다. 데이터는 파일에 여러 번 저장하거나 다른 방법으로 암호화 할 수 있습니다. 데이터가 다를 경우 파일이 변조되었음을 알 수 있습니다.