2014-04-17 2 views
-1

C 기반 응용 프로그램은 키 크기가 256 인 aes를 사용합니다. 데이터는 바이너리 형식으로 사용할 수 있으며 암호화되어 바이너리 파일에 기록됩니다. 이 바이너리 파일을 RAM (즉, 실시간/실시간 암호화)에서 해독해야합니다. 질문은 효율적인 암호화 방식으로 효율적인 방법으로 달성하는 것입니다. 플라이 (fly) 암호화에 대한 이해를 돕기 위해 좋은 웹 링크 나 코드 참조가 필요합니다.c를 사용하여 메모리에있는 큰 파일의 암호를 해독하는 방법

더 간단한 방법으로 c (Linux)를 사용하여 메모리의 큰 파일을 어떻게 해독 할 수 있습니까? 같은 truecrypt. 안내해주십시오. 안부

+0

CTR 또는 XTS와 같은 [블록 암호화 모드] (https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation)를 사용하는 경우 임의 액세스는 문제가되지 않습니다. 자세한 내용은 http://stackoverflow.com/a/22958889/371137을 참조하십시오. – Perseids

답변

0

파일에 mmap을 사용하십시오. 파일은 메모리의 데이터 스트림으로 열립니다. 예를 들어, 대형 (예를 들어, 400GB) 파일에있는 파일에 XOR의 각 바이트는 것을 간단한 메모리 변경 기능 : http://unixhelp.ed.ac.uk/CGI/man-cgi?mmap가 에게 당신이 정말로 찾아야한다하더라도 :

// The encryption function 
void xor_ram (unsigned char *buffer, long len) { 
    while (len--) *buffer ^= *buffer++; 
} 

// The file we want to encrypt 
int fd = open ("/path/to/file", O_RDWR); 

// Figure out the file length 
FILE *tmpf = fdopen (fd, "r"); 
fseek (tmpf, 0, SEEK_END); 
long length = ftell (tmpf); 

// Memory map the file using the fd 
unsigned char *mapped_file = mmap (NULL, length, 
            PROT_READ | PROT_WRITE, MAP_PRIVATE, 
            fd, 0); 
// Call the encryption function 
xor_ram (mapped_file, length); 

// All done now 
munmap (mapped_file, length); 
close (fd); 

당신이있어 mmap에 대한 맨 페이지를 읽을 수 있습니다 특정 플랫폼에서 mmap에 관한 문서 (어떤 종류의 유닉스 시스템을 사용하고 있다면 man mmap, 그렇지 않다면 플랫폼 라이브러리를 찾는다).

+0

Mmap이 암호화 된 파일을 메모리에 보관하여 성능을 향상 시키길 바랍니다. 암호화 된 파일 블록을 블록 단위로 읽고 메모리의 각 블록을 해독하는 효율적인 방법을 찾고있었습니다. 내 다음 단계는 mmap 것입니다. 도와 주셔서 감사합니다. – neutrino

관련 문제