Advertisement
Guest User

Untitled

a guest
Apr 6th, 2020
341
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.77 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <vector>
  4. #include <thread>
  5. #include <string>
  6.  
  7. using namespace std;
  8.  
  9. vector<char> vektor_obrade;
  10.  
  11. void pisi(int br_blokova, int offset,char* ulazniFajl, char* kljuc)
  12. {
  13.  
  14.     char* buffer = new char[256];
  15.     char* kljuc_za_xor = new char[256];
  16.     char* rez = new char[256];
  17.  
  18.  
  19.     ifstream file;                                  //otvaranje fajla koji se obradjuje
  20.     file.open(ulazniFajl, ios::binary | ios::in);
  21.     file.seekg(offset+4);
  22.  
  23.     ifstream key_file;                              //otvaranje fajla u kom je kljuc za obradu prvog fajla
  24.     key_file.open(kljuc, ios::binary|ios::in);
  25.  
  26.     key_file.seekg(4);
  27.  
  28.     key_file.read(kljuc_za_xor, 256);
  29.  
  30.     if(!file.is_open() || !key_file.is_open())
  31.     {
  32.         cout<<"Greska pri otvaranju nekog od fajlova."<<endl;
  33.     }
  34.  
  35.     for(int i = 0; i < br_blokova && !file.eof(); i++)
  36.     {
  37.         file.read(buffer,256);
  38.  
  39.  
  40.  
  41.         for(int j = 0; j <= 255; j++)
  42.         {
  43.  
  44.             vektor_obrade[offset + j + i*256 + 4] = buffer[j] ^ kljuc_za_xor[j];
  45.             //    rez[i] = buffer[i] + 1;
  46.         }
  47.  
  48.     }
  49.  
  50. }
  51.  
  52. void napravi_fajl(char* ulazniFajl, char* izlazni, char* kljuc, int br_niti){
  53.  
  54.     int br_koraka;
  55.     vector<thread> niti;
  56.  
  57.     ifstream file;                                                   // otvaranje fajla koji se obradjuje
  58.     file.open(ulazniFajl, ios::binary | ios::in );        //  otvori fajl i pici odmah na kraj da znam koji mi je offset/vel fajla
  59.     //vektor_obrade.resize(file.tellg());                            //   uzmi velicinu fajla
  60.  
  61.     int velicina_fajla;
  62.     file.read((char*)&velicina_fajla, sizeof(velicina_fajla));
  63.     vektor_obrade.resize(velicina_fajla + 4);
  64.   //  vektor_obrade[0] =(char)velicina_fajla;
  65.  
  66.     file.seekg(0);
  67.     file.read(vektor_obrade.data(), sizeof(velicina_fajla));
  68.  
  69.     cout << "velicina fajla: " << velicina_fajla << endl;
  70.     br_koraka =velicina_fajla/(br_niti*256);                         // broj blokova koji ce svaka nit da izvrsi
  71.  
  72.     file.close();
  73.      for(int i = 0; i < br_niti; i++){
  74.  
  75.         niti.push_back(thread(pisi,br_koraka,br_koraka*i*256,ulazniFajl, kljuc));              //offset - odakle krece svaka od niti
  76.  
  77.     }
  78.  
  79.     for(auto it = niti.begin(); it != niti.end(); it++){
  80.  
  81.         it->join();
  82.  
  83.     }
  84.  
  85.     fstream izlaz;
  86.     izlaz.open(izlazni, ios::binary|ios::out);
  87.     izlaz.write(vektor_obrade.data(), vektor_obrade.size());
  88. }
  89.  
  90.  
  91. int main(int argc, char* argv[])
  92. {
  93.     char* ulazniFajl = argv[1];
  94.     char* kljuc      = argv[2];
  95.     char* izlazni    = argv[3];
  96.     int br_niti      = atoi(argv[4]);
  97.  
  98.     vector<thread> niti;
  99.  
  100.     napravi_fajl(ulazniFajl, izlazni, kljuc,br_niti);
  101.  
  102.    // int br_koraka = velicina/br_niti;
  103.  
  104.     return 0;
  105. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement