Advertisement
alien1337

Untitled

Apr 4th, 2020
784
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.54 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <string>
  4. #include <vector>
  5. #include <functional>
  6. #include <thread>
  7.  
  8. using namespace std;
  9.  
  10. typedef vector<char>::iterator itr;
  11. typedef vector<char>::const_iterator citr;
  12.  
  13. vector<char> unos(string filename, unsigned int& n){
  14.     ios_base::openmode mode = ios_base::binary;
  15.     ifstream file (filename, mode);
  16.    if(file.is_open())
  17.    {
  18.         //unsigned int n = 0;
  19.         // read data as a block:
  20.         file.read ((char*)&n,sizeof(unsigned int));
  21.         cout << "Broj je = " << n << endl;
  22.  
  23.         vector<char> unos(n);
  24.         vector<char>::iterator it;
  25.  
  26.         for(it=unos.begin(); it!=unos.end();it++){
  27.             file.read((char*)&(*it), sizeof(char));
  28.         }
  29.  
  30.         for(it=unos.begin(); it!=unos.end();it++){
  31.             cout << *it << " ";
  32.         }
  33.  
  34.         /*
  35.         for(unsigned int i = 0; i<broj; i++){
  36.             file.read((char*)&unos[i],sizeof(unos[i]));
  37.         }
  38.         */
  39.         /*
  40.         for(unsigned int i = 0; i<broj; i++){
  41.             cout << unos[i] << ";";
  42.         }
  43.         */
  44.         file.close();
  45.         return unos;
  46.    }
  47. }
  48.  
  49. char* unosKey(string filename, unsigned int& n){
  50.  
  51.     ios_base::openmode mode = ios_base::binary;
  52.     ifstream file (filename, mode);
  53.     if(!file.is_open()){
  54.             cout << "Greska pri otvaranju datoteke" << endl;
  55.             exit(1);
  56.     }
  57.  
  58.     file.read ((char*)&n,sizeof(unsigned int));
  59.     cout << "Broj je = " << n << endl;
  60.  
  61.     char* key = (char*)malloc(n*sizeof(char));
  62.     if(key==NULL){
  63.         cout << "Nedovoljno memorije" << endl;
  64.         exit(2);
  65.     }
  66.     for(unsigned int i = 0; i<n; i++)
  67.         file.read((char*)&key[i], sizeof(char));
  68.  
  69.     for(unsigned int i = 0; i<n; i++)
  70.         cout << key[i] << " ";
  71.  
  72.     file.close();
  73.     return key;
  74.  
  75. }
  76.  
  77. void xorr(itr pocetak_izlaz, itr kraj_izlaz, citr poc_ulaz, char* key,int i){
  78.     for(; pocetak_izlaz!=kraj_izlaz; pocetak_izlaz++,i++,poc_ulaz++){
  79.         *pocetak_izlaz = (*poc_ulaz)^key[i%256];
  80.     }
  81. }
  82.  
  83. int main()
  84. {
  85.  
  86.    /*std::ifstream file ("in.dat", ios_base::binary);
  87.    if(file.is_open())
  88.    {
  89.         unsigned int broj = 0;
  90.         // read data as a block:
  91.         file.read ((char*)&broj,sizeof(unsigned int));
  92.         cout << "Broj je = " << broj << endl;
  93.  
  94.         vector<char> unos(broj);
  95.  
  96.         for(unsigned int i = 0; i<broj; i++){
  97.             file.read((char*)&unos[i],sizeof(unos[i]));
  98.         }
  99.  
  100.         for(unsigned int i = 0; i<broj; i++){
  101.             cout << unos[i] << ";";
  102.         }
  103.  
  104.         file.close();
  105.    }*/
  106.  
  107.  
  108.  
  109.    unsigned int inputN = 0;
  110.    vector<char> input = unos("in.dat", ref(inputN));
  111.    cout << endl;
  112.  
  113.    unsigned int keyN = 0;
  114.    /*
  115.    vector<char> key = unos("key.dat", keyN);
  116.    */
  117.    char* key = unosKey("key.dat", ref(keyN));
  118.    cout << endl;
  119.    //vector<char> out = unos("out.dat");
  120.  
  121.    /*
  122.     std::ifstream file1 ("key.dat", ios_base::binary);
  123.    //file.open("in.dat");
  124.  
  125.    if(file1.is_open())
  126.    {
  127.         unsigned int broj = 0;
  128.         // read data as a block:
  129.         file1.read ((char*)&broj,sizeof(unsigned int));
  130.         cout << "Broj je = " << broj << endl;
  131.  
  132.         vector<char> unos(broj);
  133.  
  134.         for(unsigned int i = 0; i<broj; i++){
  135.             file1.read((char*)&unos[i],sizeof(unos[i]));
  136.         }
  137.  
  138.         for(unsigned int i = 0; i<broj; i++){
  139.             cout << unos[i] << ";";
  140.         }
  141.  
  142.         file1.close();
  143.    }
  144.     */
  145.  
  146.     vector<char> rez(inputN);
  147.     vector<char>::const_iterator itinput = input.begin();
  148.     //vector<char>::const_iterator itkey = key.begin();
  149.     vector<char>::iterator itrez = rez.begin();
  150.  
  151.     cout << endl << endl << endl << "\t\t\t\t\tRESENJE:" << endl;
  152.  
  153.     int broj_niti;
  154.    cout << "Unesi broj niti: ";
  155.    cin >> broj_niti;
  156.  
  157.     int i = 0;
  158.     int bajtova_po_niti;
  159.  
  160.     bajtova_po_niti = inputN/broj_niti;  // broj bajtova koje obradjuje 1 nit
  161.     thread nit[broj_niti];
  162.  
  163.     int j;
  164.  
  165.     for(j = 0; j<broj_niti-1; j++){
  166.         nit[j] = thread(xorr, rez.begin()+j*bajtova_po_niti, rez.end()+j*bajtova_po_niti+bajtova_po_niti, input.begin()+j*bajtova_po_niti, key, i);
  167.         i = (i + bajtova_po_niti)%256;
  168.     }
  169.  
  170.     nit[broj_niti-1] = thread(xorr, rez.begin()+j*bajtova_po_niti, rez.end(), input.begin()+j*bajtova_po_niti, key, i);
  171.  
  172.     for(j = 0; j<broj_niti;j++)
  173.         nit[j].join();
  174.  
  175.  
  176.     /*
  177.     thread t(xorr, rez.begin(), rez.end(), input.begin(), key, i);
  178.     t.join();
  179.     */
  180.  
  181.     /*
  182.     int i;
  183.     for(itinput = input.begin(),i=0; itrez!=rez.end(); itrez++,i++,itinput++){
  184.         *itrez = (*itinput)^key[i%256];
  185.     }
  186.  
  187.  
  188.     for(itrez=rez.begin(); itrez!=rez.end(); itrez++){
  189.         cout << *itrez << " ";
  190.     }
  191.  
  192.     vector<char> rez1(inputN);
  193.     vector<char>::iterator itrez1 = rez1.begin();
  194.     cout << endl << endl << endl << "\t\t\t\t\tRESENJE:" << endl;
  195.     xorr(rez1.begin(), rez1.end(), input.begin(), input.end(), key);
  196.     for(itrez1=rez1.begin(); itrez1!=rez1.end(); itrez1++){
  197.         cout << *itrez1 << " ";
  198.     }
  199.  
  200.     for(int i = 0; i<5; i++){
  201.         cout << rez[i];
  202.     }
  203.     */
  204.  
  205.     // UPIS IZLAZA U DATOTEKU:
  206.     std::ofstream file ("ou1.dat", ios::binary | ios::in | ios::out | ios::trunc);
  207.     if(file.is_open())
  208.     {
  209.         file.write((char*)&inputN, sizeof(unsigned int));
  210.         for(vector<char>::const_iterator it=rez.begin(); it!=rez.end(); it++)
  211.             file.write((char*)&(*it),sizeof(char));
  212.     }
  213.     file.close();
  214.     cout << endl << endl << "inputN = " << inputN << " keyN = " << keyN << endl;
  215.  
  216.     delete[] key;
  217.     return 0;
  218. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement