2016-09-23 3 views
0

У меня есть программа C++ AES alogirthm, которую я использую для шифрования текстовых файлов, которые присутствуют на одной машине. Теперь я увеличиваю его функциональность, загружая новые файлы на этом компьютере с разных компьютеров, используя веб-приложение.Подключение программы на C++ с Java API

Мое веб-приложение создано из java, которое будет связано с машиной сервера через API (который также построен на Java). Когда пользователь нажимает кнопку загрузки (присутствует в веб-приложении), вызывается API, и он будет загружать файл на серверной машине. Работа идет гладко до этого момента, так как я успешно получил файл на серверной машине с другой машины (сейчас на той же локальной сети).

Однако, теперь я застрял. Я хочу, чтобы моя программа на C++ каким-то образом узнала, что на компьютер появился новый файл, оттуда оттуда и зашифровать его. Но как это можно сделать?

До моего понимания я думал, что, возможно, JavaScript может быть использован, но я действительно не знаю, как это будет работать.

Пожалуйста, дайте мне знать, если мне нужно предоставить более подробную информацию. Любое руководство будет действительно оценено! Благодаря!!

+0

В C++ вы можете отслеживать каталог для появления новых файлов. На Linux у вас inotify на Windows есть что-то. –

+0

Я предполагаю, что в приложении Java есть какой-то тип обработчика событий загрузки файлов, который вы используете для загрузки файлов, что также сохраняет их на сервере. Если это так, вам просто нужно выполнить приложение C++ после этого. – Archer

ответ

0

Исправить меня - ваша программа Java загружает файл и помещает его в известное местоположение? так почему бы вам просто не создать JNI-оболочку (jar lib) для вашего приложения C++, а затем, после успешной загрузки, вы просто скажете свой файл 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 и редактировать функцию кодирования

(Мой первый answer here btw ^^)

+0

Это очень полезно. Огромное спасибо! Прокомментируйте здесь еще раз, если мне нужно дальнейшее понимание этой концепции. Но это, безусловно, очень помогло мне! Ура! – DD25

+0

мой код в C++, будет ли он работать с этим? С учетом его права C? – DD25

Смежные вопросы