2016-09-23 3 views
0

동일한 컴퓨터에있는 텍스트 파일을 암호화하는 데 사용하는 C++ AES alogirthm 프로그램이 있습니다. 이제 웹 응용 프로그램을 사용하여 다른 컴퓨터에서 해당 컴퓨터에 새 파일을 업로드하여 기능을 향상시키고 있습니다.Java API로 C++ 프로그램 연결

내 웹 응용 프로그램은 java로 만들어졌으며 API를 통해 서버 컴퓨터에 연결됩니다 (Java 기반). 사용자가 업로드 버튼 (웹 앱에 있음)을 누르면 API가 호출되고 서버 컴퓨터에 파일이 업로드됩니다. 다른 컴퓨터에서 서버 머신의 파일을 성공적으로 수신 했으므로이 시점까지 작업이 원활하게 진행됩니다 (현재는 동일한 LAN에 있음).

그러나 지금은 붙어 있습니다. 내 C++ 프로그램이 어떻게 든 자동으로 알기를 원한다. 새로운 파일이 컴퓨터에 도착하고, 거기에서 가져 와서 암호화한다. 그러나 어떻게 할 수 있습니까?

내가 이해할 때까지는 JavaScript를 사용할 수 있다고 생각했지만 실제로 어떻게 작동하는지 모릅니다.

자세한 내용을 알려 주시면 알려주세요. 모든 지침 정말 감사하겠습니다! 감사!!

+0

C++에서는 표시되는 새 파일의 디렉토리를 모니터링 할 수 있습니다. 리눅스에서는 윈도우에서 inotify가있다. –

+0

파일을 업로드하는 데 사용하는 Java 응용 프로그램에 파일 업로드 이벤트 처리기 유형이 있다고 가정합니다. 또한 파일을 서버에 저장합니다. 그렇다면 C++ 응용 프로그램을 실행해야합니다. – Archer

답변

0

자바 프로그램이 파일을 다운로드하여 알려진 위치에 넣으십시오. 그렇다면 C++ 애플리케이션을위한 JNI wrapper (jar lib)를 만든 다음 성공한 다운로드 후에 lib/path/to/file을 말하고 암호화하십시오.

아마도 이미 암호화 된 바이트를 받고 디스크에 쓰는 바이트 스트림을 암호화 할 수 있습니까?

-1

내가 제대로 이해 경우에, 당신을 도울 수 있습니다 https://msdn.microsoft.com/enus/library/windows/desktop/aa365261(v=vs.85).aspx

다음

동작하는 예제입니다 :

#include <windows.h> 
#include <stdio.h> 
#define DIR_PATH L"C:\\temp\\files" 

void encrypt(WCHAR* fileName); 
OVERLAPPED overlapped = {0}; 
union { 
    FILE_NOTIFY_INFORMATION i; 
    char d[sizeof(FILE_NOTIFY_INFORMATION)+MAX_PATH]; 
} fni; 

int main() 
{ 
    HANDLE hDirectory; 
    BOOL res; 
    DWORD bytesReturned; 

    // Create handle for the directory 
    hDirectory = CreateFileW(DIR_PATH, FILE_LIST_DIRECTORY | GENERIC_READ,FILE_SHARE_READ | FILE_SHARE_WRITE,NULL,OPEN_EXISTING, FILE_FLAG_OVERLAPPED | FILE_FLAG_BACKUP_SEMANTICS,NULL); 
    overlapped.hEvent = CreateEvent(0,0,0,0); 

    // Monitor as long as running 
    while (1) 
    { 
     res = ReadDirectoryChangesW(hDirectory,(LPVOID)&fni,sizeof(fni),FALSE,FILE_NOTIFY_CHANGE_SIZE, 
                   &bytesReturned,&overlapped,NULL); 
     // Error checking 
     if (res == 0) 
     { 
      printf("error: %d\n",GetLastError()); 
      return 1; 
     } 

     // check if a new file has been created in the directory 
     GetOverlappedResult(hDirectory,&overlapped,&bytesReturned,TRUE); 
     if (fni.i.Action != 0) 
      encrypt(fni.i.FileName); 
    } 
} 

//This is the encryption function 
void encrypt(WCHAR* fileName) 
{ 
    wprintf(L"Encrypting code here!\nFileName=%ls\n",fileName); 
} 

가 그냥 암호화 기능

을 DIR_PATH을 교체하고 편집 (나의 첫번째 대답은 여기 btw ^^)

+0

이것은 실제로 매우 유용합니다. 무리 감사! 이 개념을 더 깊이 이해할 필요가 있다면 여기에서 다시 언급 할 것입니다. 그러나 이것은 분명히 많은 도움이되었습니다! 건배! – DD25

+0

내 코드가 C++에서 작동합니다. 그 C 권리를 고려하고 있니? – DD25

관련 문제