ZADANIE 1
c++
Napisz kod programu z funkcją szyfrującą która jednocześnie jest funkcją deszyfrującą (klucz: AG-ED-YR-OP-UL-IK)



Odpowiedź :

Odpowiedź:

#include <iostream>

#include <string>

#include <vector>

#include <sstream>

#include <iomanip>

#include <algorithm>

using namespace std;

vector<int> format_klucz(string przedformat){

vector<int> klucz = {1, 1, 1, 1, 1, 1};

if (przedformat.length() != 17){

 klucz[0] = -1;

 return klucz;

}

string legalne_char = "ABCDEFGHIJKLMNOPQRSTUVWXYZ-";

int test[2] = {0, 0};

for(char& l : przedformat){

 test[0] = 0;

 for(char& c : legalne_char){

  if(l==c){

   test[0]++;

  }

 }

 if(l=='-'){

  test[1]++;

 }

 if (test==0) {

  klucz[0] = -2;

  return klucz;

 }

}

if(test[1] != 5){

 klucz[0] == -3;

 return klucz;

}

string przedformat_2 = "";

int index = 0;

for(char& c : przedformat){

 if (c=='-') {

  index++;

 } else {

 klucz[index] *= legalne_char.find(c)+1;

 }

}

return klucz;

}

string szyfr(vector<int> klucz, string tekst){

string szyfrowany = "";

int long char_int = 0;

string formatowany;

for(char& c : tekst){

 char_int = (int long)c;

 for(int& element : klucz){

  char_int ^= element;

 }

 stringstream ss;

 ss << hex << setw(4) << setfill('0') << char_int;

 formatowany = ss.str();

 szyfrowany.append(formatowany);

}

return szyfrowany;

}

string deszyfr(vector<int> klucz, string tekst){

vector<string> pre_deszyfrowany = {};

string deszyfrowany;

if(tekst.length()%4){

 return "";

}

for(int i=0; i<(tekst.length()/4); i++){

 pre_deszyfrowany.push_back(tekst.substr(i*4, 4));

}

for(string element : pre_deszyfrowany){

 int liczba;

 stringstream ss;

 ss << hex << element;

 ss >> liczba;

 reverse(klucz.begin(), klucz.end());

 for(int i : klucz){

  liczba ^= i;

 }

 char charakter = liczba;

 deszyfrowany.push_back(charakter);

}

return deszyfrowany;

}

int main(){

string przedformat;

cout << "Wprowadz klucz (format: AA-BB-CC-DD-EE-FF): ";

cin >> przedformat;

vector<int> klucz = format_klucz(przedformat);

string odpowiedz;

while (odpowiedz!="s" && odpowiedz!="d") {

 cout << "(s)zyfrować czy (d)eszyfrować?: ";

 cin >> odpowiedz;

 odpowiedz = odpowiedz.at(0);

 if (odpowiedz!="s" && odpowiedz!="d") {

  cout << "Podaj prawidłową odpowiedz" << endl;

 }

}

if (odpowiedz=="s") {

 string tekst;

 cout << "Podaj tekst aby szyfrować: ";

 cin.ignore(numeric_limits<streamsize>::max(), '\n');

 getline(cin, tekst);

 cout << tekst << endl;

 cout << "Twój szyfrowany tekst to:\n" << szyfr(klucz, tekst) << endl;

}

if (odpowiedz=="d") {

 string tekst;

 cout << "Podaj tekst aby deszyfrować: ";

 cin >> tekst;

 cout << "Twój deszyfrowany tekst to:\n" << deszyfr(klucz, tekst) << endl;

}

return 0;

}

Komentarz:

uff, nareszcie się udało! i ja myśle że wyszło fajnie. licze na naj bo ponad godzine to robiłem