Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<fstream>
- #include<vector>
- #include<thread>
- #include<mutex>
- typedef unsigned char BYTE;
- using namespace std;
- mutex m;
- void XOR(int begin, int end, vector<BYTE> in, vector<BYTE> key, vector<BYTE> &rez){
- for(int i= begin; i< end; i ++){
- int k = i % 256;
- BYTE tmp;
- tmp = in[i] ^ key[k];
- //rez.emplace(rez.end(), tmp);
- //rez.push_back(tmp);
- rez[i] = tmp;
- //cout<< i ;
- }
- }
- vector<BYTE> fileToVector(string filename){
- int size;
- ifstream file;
- file.open(filename, ios::in|ios::binary);
- file.read((char*)&size, 4);
- file.seekg(4, ios::beg);
- vector<BYTE> v(size);
- file.read((char*)&v[0],size);
- return v;
- }
- int main(){
- int thread_num = 22 ;
- vector<BYTE> in = fileToVector("in.dat");
- vector<BYTE> key = fileToVector("key.dat");
- vector<BYTE> out(in.size());
- thread t[thread_num];
- int split = in.size()/thread_num;
- for(int i=0; i<thread_num - 1; i++){
- t[i] = thread(XOR, i*split, (i+1)*split, in, key, ref(out));
- }
- //nit koja kupi ostatak kad broj niti nije stepen dvojke
- t[thread_num - 1] = thread(XOR, (thread_num - 1)*split,in.size(), in, key, ref(out));
- for(int i=0; i<thread_num; i++){
- t[i].join();
- }
- ofstream f;
- f.open("test.dat", ios::binary);
- int vel = out.size();
- f.write((char*)&vel, sizeof(vel));
- for(BYTE i:out)
- f<<i;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement