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