Cześć napisałem funkcje, która pobiera od użytkownika tekst do stringa, następnie zamienia go na ASCII tego z kolei na postać binarną. Tworze losową zmienną całkowitą z zakresu od 0-255, zamieniam ją na postać binarną i wykorzystuje do operacji XOR jako klucza. Dalej to co otrzymałem po operacji XOR zamieniam z postaci binarnej na ASCII, wrzucam do stringa i zapisuje do pliku. Moja prośba polega na sprawdzeniu kodu, oraz wskazaniu mi ewentualnych błędów w projekcie funkcji. Mam wrażenie, że zabiłem wydajność....oraz że kod mógłby być o wiele krótszy.... Proszę o wypowiedź ;)
srand(time(0));
pass = rand()%256;
cout<< "Wpisz tekst: ";
getline(cin, tmp_str);
size = tmp_str.size();
int tmp_int[size];
for (int i=0; i<size; i++)
tmp_int[i] = char(tmp_str[i]);
cout<<endl;
int bin[size][8];
int binary[8];
for(int j=0; j<size; j++) {
int asci = tmp_int[j];
for (int i=0; i<8; i++) {
binary[i] = asci % 2;
asci = (asci - binary[i]) / 2;
}
for (int i=7; i>=0; i--)
bin[j][i] = binary[i];
}
unsigned int password[8];
for (int i=0; i<8; i++) {
password[i] = pass % 2;
pass = (pass - password[i]) / 2;
}
//operacja XOR------------operacja XOR------------operacja XOR
cout<<endl;
for (int j=0; j<size; j++) {
for (int i=7; i>=0; i--)
bin[j][i] = bin[j][i] ^= password[i];
}
//operacja XOR------------operacja XOR------------operacja XOR
unsigned int pot2[8] = {128, 64, 32, 16, 8, 4, 2, 1};
unsigned int result[size];
for(int j=0; j<size; j++) {
result[j] = 0;
for (int i=7; i>=0; i--) {
if (bin[j][i] == 1)
result[j] = result[j] + pot2[8-(i+1)];
else result[j] = result[j];
}
}
string tmp_file;
for (int i=0; i<size; i++)
tmp_file += char(result[i]);
const string txt = ".txt";
string nazwa_pliku;
cout<< "Podaj nazwe pliku: ";
getline(cin, nazwa_pliku);
nazwa_pliku += txt;
ofstream file;
file.open(nazwa_pliku.c_str(), ios_base::out | ios_base::app);
file<< tmp_file <<endl;