1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169
|
#include <getopt.h>
#include <iomanip>
#include "Encryption.h"
#include <string>
#include <string.h>
#include <iostream>
#include <fstream>
int main(int argc, char* argv[])
{
int c;
bool isH = false;
bool isD = false;
bool isC = false;
bool errFlag = true;
//la boucle while avec getopt permet de lire l'option choisi par l'utilisateur
while ((c = getopt(argc, argv, "hd:c:")) != EOF)
{
switch((char) c)
{
//l'option -h est pour afficher les options disponibles par le programme
case 'h':
isH = true;
errFlag = false;
break;
//l'option -d permet de décripter un fichier entrant : "fichier_sec.txt"
case 'd':
if (!isH && argc >= 4)
{
isD = true;
errFlag = false;
}
break;
//l'option -c permet de crypter un fichier entrant : "fichier.txt"
case 'c':
if (!isH && argc >= 4)
{
isC = true;
errFlag = false;
}
break;
//si l'option choisi par l'utilisateur est autre que -h, -d ou -c
case '?' :
default:
errFlag = true;
}
}
//si l'option choisie est -h : afficher les options disponibles par le
//Ou s'il y a une erreur
if(isH || errFlag)
{
cout << "les commandes utilisees dans ce programme sont : " << endl << endl;
cout << setw(7) <<"-h : " << "pour affichier les commandes disponibles dans ce programme" << endl << endl;
cout << setw(7) <<"-c : " << "pour crypter un fichier entrant dans un fichier sortant" << endl;
cout << setw(7) << "" << setw(16) << "1er argument : " << "nom du programme" << endl;
cout << setw(7) << "" << setw(16) << "2eme argument : " << "l'option (-c)" << endl;
cout << setw(7) << "" << setw(16) << "3eme argument : " << "nom de la clef" << endl;
cout << setw(7) << "" << setw(16) << "4eme argument : " << "nom du fichier a crypter" << endl;
cout << setw(7) << "" << "[ex: exo01.exe -c programmation fichier.txt]" << endl << endl;
cout << setw(7) <<"-d : " << "pour decrypter un fichier entrant dans un fichier sortant" << endl;
cout << setw(7) << "" << setw(16) << "1er argument : " << "nom du programme" << endl;
cout << setw(7) << "" << setw(16) << "2eme argument : " << "l'option (-d)" << endl;
cout << setw(7) << "" << setw(16) << "3eme argument : " << "nom de la clef" << endl;
cout << setw(7) << "" << setw(16) << "4eme argument : " << "nom du fichier a decrypter" << endl;
cout << setw(7) << "" << "[ex: exo01.exe -d programmation fichier_sec.txt]" << endl << endl;
return 0;
}
//si l'option choisie est -d : décrypter un fichier entrant
else if (isD)
{
string cle = optarg;
string inFichier = argv[optind];
string outFichier;
//Si aucune extention, rajoute de l'extention par défaut.
if ((int) inFichier.find(".") == -1) inFichier = inFichier + ".txt";;
//crée le nom du fichier décrypter sortant
if((int) inFichier.find("_sec") != -1)
{
outFichier = inFichier.substr(0,inFichier.find("_")) + "_dec.txt";
}
//si le nom du fichier entrant ne contient pas les caractéristiques attendues
else
{
cout << "le fichier d'entree d'un decrytage doit inclure _sec.txt a la fin";
return 0;
}
//ouvre les fichier entrant et sortant
ifstream in(inFichier.c_str(), ios::in);
ofstream out(outFichier.c_str(), ios::out | ios::trunc);
//si les fichiers entrant et sortant ne souvre pas correctement
if (in.fail())
{
cout << "erreur a l'ouverture du fichier entrant" << endl;
return 0;
}
if (out.fail())
{
cout << "erreur a l'ouverture du fichier sortant" << endl;
return 0;
}
//crée une instance de la classe encryption et lance la méthode decrypt
Encryption* encrypt = new Encryption(cle);
encrypt->decrypt(in, out);
//ferme les fichier entrant et sortant et delete l'instance de la classe encryption
in.close();
out.close();
delete(encrypt);
cout << "Decryptage termine" << endl;
return 0;
}
//si l'option choisi est -c : crypter un fichier entrant
else if (isC)
{
string cle= optarg;
string inFichier = argv[optind];
//Si aucune extention, rajoute de l'extention par défaut.
if ((int) inFichier.find(".") == -1) inFichier = inFichier + ".txt";
//crée le nom du fichier crypter sortant
string outFichier = inFichier.substr(0,inFichier.find(".")) + "_sec.txt";
//ouvre les fichier entrant et sortant
ifstream in(inFichier.c_str(), ios::in);
ofstream out(outFichier.c_str(), ios::out | ios::trunc);
//si les fichiers entrant et sortant ne souvre pas correctement
if (in.fail())
{
cout << "erreur a l'ouverture du fichier entrant" << endl;
return 0;
}
if (out.fail())
{
cout << "erreur a l'ouverture du fichier sortant" << endl;
return 0;
}
//crée une instance de la classe encryption et lance la méthode crypt
Encryption* encrypt = new Encryption(fiécle);
encrypt->crypt(in, out);
//ferme les fichier entrant et sortant et delete l'instance de la classe encryption
in.close();
out.close();
//delete(encrypt);
cout << "Cryptage termine" << endl;
return 0;
}
} |
Partager