2010-04-01 1 views
1

, 나는 3 개 ASCII 파일이있는 경우 :ASCII 텍스트 파일을 결합한 다음 암호화하고 해독 한 다음 '파일'클래스에 넣는 방법은 무엇입니까? 예를 들어 C++

file1.txt 
file2.txt 
file3.txt 

을 ... 그리고 하나 개의 암호화 된 파일로 결합하고 싶었 : 응용 프로그램 I 데이터베이스를 해독 할에 그런

database.txt 

.txt 파일을 만들고 각각의 원본 파일을 힙의 '파일'클래스에 넣으십시오.

class File{ 
public: 
    string getContents(); 
    void setContents(string data); 
private: 
    string m_data; 
}; 

어떤 방법이 있습니까?

감사

+0

C++로 할 수 있습니다. 당신의 진정한 질문은 무엇입니까? 암호화로 무엇을 달성하고 싶습니까? File 클래스에 setContents 함수가있는 경우에는 해독 된 버전을 메모리 내에서만 변경하거나 새 내용을 디스크의 암호화 된 파일에 다시 기록해야합니다. –

+0

저는 최종 사용자가 파일을 볼 수있게하고 싶지 않습니다. 그게 전부입니다. 메모리의 파일을 해독합니다. 감사합니다 – Joel

+1

사용자는 메모리도 읽을 수 있습니다. 일반 사용자의 데이터를 숨기려면 파일에 맞춤 확장을 지정합니다 (예 : 프로젝트 "r"의 데이터 파일 인 경우 .dfr). – strager

답변

6

은 그냥 zip 파일을 사용할 수 있습니까?
물론 파일 이름을 저장하기 위해 자신의 헤더 메타 데이터를 굴릴 수는 있지만,이 특정 휠은 충분히 다시 발명되었습니다.

당신이 ZLIB에 의해, 당신은 당신의 플랫폼에서 지하실 기능을 사용할 수 있습니다, 또는 당신이 사전을 사용하지 않으려면 blowfish

+1

+1 기존 기술을 사용하는 것이 좋습니다. –

+0

실제로; 라이센스 문제 나 하드웨어 제약이없는 한 가장 좋은 해결책 일 것입니다. – strager

0

같은 것을 구현하는 것은 매우 간단을 제공하는 것보다 더 나은 암호화가 필요한 경우 존재하는 파일 형식은 자신 만의 단순한 형식으로 만듭니다. 이 레이아웃 같은

뭔가 작업을해야합니다 :

class DatabaseFile { 
    private: 
     struct FileHeader { 
      uint32_t fileId; 
      uint32_t fileSize; 
      char data[0]; 
     }; 

     File readFile(...) { 
      read(); 
      decrypt(); 
     } 

     File writeFile(...) { 
      encrypt(); 
      write(); 
     } 

    public: 
     DatabaseFile(); 
     DatabaseFile(std::vector<File> files); 

     static DatabaseFile read(std::istream) { 
      while(!eof) { 
       readFile(); 
      } 
     } 

     void write(std::ostream) { 
      foreach(file) { 
       writeFile(); 
      } 
     } 

     std::vector<File> files; 
}; 

class DatabaseFileEncryption { 
    // However you want it ... 
}; 
관련 문제