79 lines
2.6 KiB
C++
79 lines
2.6 KiB
C++
/*
|
|
AUTORE: Manuel Vichi
|
|
Cifratura di una stringa con chiave privata usando il codice ASCII
|
|
*/
|
|
#include <iostream>
|
|
#include <cstring>
|
|
#include <cctype>
|
|
#include <cstdlib>
|
|
using namespace std;
|
|
void clearConsole() {
|
|
#ifdef _WIN32
|
|
system("cls"); // Windows
|
|
#else
|
|
system("clear"); // MacOS/Linux
|
|
#endif
|
|
}
|
|
char * encryptString(char * const string, char * const private_key, size_t private_key_length) {
|
|
for (size_t i = 0, s = 0; string[i] != '\0'; i++,s++) {
|
|
if (s == private_key_length)
|
|
s = 0;
|
|
string[i] = string[i] + private_key[s];
|
|
}
|
|
return string;
|
|
}
|
|
char * decryptString(char * const string, char * const private_key, size_t private_key_length) {
|
|
for (size_t i = 0, s = 0; string[i] != '\0'; i++,s++) {
|
|
if (s == private_key_length)
|
|
s = 0;
|
|
string[i] = string[i] - private_key[s];
|
|
}
|
|
return string;
|
|
}
|
|
int main(void) {
|
|
char privkey[20+1];
|
|
cout << "Benvenuto nella cifratura di stringhe" << endl << endl;
|
|
cout << "Per iniziare, ti verra' chiesta la chiave privata." << endl << "La chiave privata e' una stringa che viene usata per cifrarne un'altra, e senza di essa la stringa cifrata e' quasi impossibile da decifrare." << endl << "Assicurati di non perdere la chiave privata e di fornirla a chi dovra decifrare la stringa." << endl << "Premendo invio, la console verra pulita, assicurati quindi di salvare la chiave privata prima di digitarla nel programma." << endl;
|
|
cout << "Chiave privata (20 caratteri): ";
|
|
cin.getline(privkey,sizeof(privkey));
|
|
cout << endl;
|
|
if (privkey[0] == '\0') {
|
|
cerr << "La chiave privata non puo' essere vuota." << endl;
|
|
return -1;
|
|
}
|
|
clearConsole(); // Pulizia della console cross-platform
|
|
char stringa[80+1];
|
|
int num = 0;
|
|
cout << "Benvenuto nella cifratura di stringhe" << endl << endl << "1 - Cifra stringa" << endl << "2 - Decifra stringa" << endl;
|
|
do {
|
|
cout << "Scelta: ";
|
|
cin >> num;
|
|
cout << endl;
|
|
} while (num < 0 || num > 2);
|
|
if (num == 0)
|
|
return -1;
|
|
switch (num) {
|
|
case 1:
|
|
cout << "Inserire la stringa: ";
|
|
cin.ignore(); // Fix per la getline
|
|
cin.getline(stringa,sizeof(stringa));
|
|
cout << endl;
|
|
encryptString(stringa,privkey,strlen(privkey));
|
|
cout << "Stringa cifrata: " << stringa << endl;
|
|
break;
|
|
case 2:
|
|
cout << "Inserire la stringa cifrata: ";
|
|
cin.ignore(); // Fix per la getline
|
|
cin.getline(stringa,sizeof(stringa));
|
|
cout << endl;
|
|
decryptString(stringa,privkey,strlen(privkey));
|
|
cout << "Stringa decifrata: " << stringa << endl;
|
|
break;
|
|
default:
|
|
return -1;
|
|
}
|
|
cout << endl << "Premere Invio per chiudere...";
|
|
getchar();
|
|
return 0;
|
|
}
|