<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<atom:link href="http://forum.ubuntu-fr.org/extern.php?action=feed&amp;tid=1173941&amp;type=rss" rel="self" type="application/rss+xml" />
		<title><![CDATA[Forum Ubuntu-fr.org / [C++] Sondage: programmes de chiffrement amateur. [Resolu]]]></title>
		<link>http://forum.ubuntu-fr.org/viewtopic.php?id=1173941</link>
		<description><![CDATA[Les sujets les plus récents dans [C++] Sondage: programmes de chiffrement amateur. [Resolu].]]></description>
		<lastBuildDate>Mon, 21 Jan 2013 10:52:39 +0000</lastBuildDate>
		<generator>FluxBB</generator>
		<item>
			<title><![CDATA[Réponse à&#160;:  [C++] Sondage: programmes de chiffrement amateur. [Resolu]]]></title>
			<link>http://forum.ubuntu-fr.org/viewtopic.php?pid=12286221#p12286221</link>
			<description><![CDATA[<p>non mais le programme du forum n&#039;est pas a jour <img src="http://forum.ubuntu-fr.org/img/smilies/wink.png" width="15" height="15" alt="wink" /></p>]]></description>
			<author><![CDATA[dummy@example.com (Destroyers)]]></author>
			<pubDate>Mon, 21 Jan 2013 10:52:39 +0000</pubDate>
			<guid>http://forum.ubuntu-fr.org/viewtopic.php?pid=12286221#p12286221</guid>
		</item>
		<item>
			<title><![CDATA[Réponse à&#160;:  [C++] Sondage: programmes de chiffrement amateur. [Resolu]]]></title>
			<link>http://forum.ubuntu-fr.org/viewtopic.php?pid=12286091#p12286091</link>
			<description><![CDATA[<p>Et t&#039;as testé avec &quot;titi&quot; ? <img src="http://forum.ubuntu-fr.org/img/smilies/lol.png" width="15" height="15" alt="lol" /></p>]]></description>
			<author><![CDATA[dummy@example.com (tiramiseb)]]></author>
			<pubDate>Mon, 21 Jan 2013 10:43:28 +0000</pubDate>
			<guid>http://forum.ubuntu-fr.org/viewtopic.php?pid=12286091#p12286091</guid>
		</item>
		<item>
			<title><![CDATA[Réponse à&#160;:  [C++] Sondage: programmes de chiffrement amateur. [Resolu]]]></title>
			<link>http://forum.ubuntu-fr.org/viewtopic.php?pid=12286061#p12286061</link>
			<description><![CDATA[<p>T&#039;inquiète pas, j&#039;ai réglé le problème toto dès que j&#039;ai su que ça ne marchait pas x)</p>]]></description>
			<author><![CDATA[dummy@example.com (Destroyers)]]></author>
			<pubDate>Mon, 21 Jan 2013 10:42:01 +0000</pubDate>
			<guid>http://forum.ubuntu-fr.org/viewtopic.php?pid=12286061#p12286061</guid>
		</item>
		<item>
			<title><![CDATA[Réponse à&#160;:  [C++] Sondage: programmes de chiffrement amateur. [Resolu]]]></title>
			<link>http://forum.ubuntu-fr.org/viewtopic.php?pid=12285891#p12285891</link>
			<description><![CDATA[<p>Dans le cas de destroyers il serait en effet interessant qu&#039;il regarde du coté de ces bobliothèques tierces, c&#039;est toujours bon d&#039;avoir des conaissances sous la main. <br />En revanche, j&#039;ai pris pas mal de retard avec ce défi si bien que je n&#039;ai pas meme encore commencé l&#039;apprentissage avancé de la POO. <br />En bref j&#039;en conclut qu&#039;en dépit du fonctionnement de CRYPTconsol, Encryptor l&#039;emporte sur sa meilleure lisibilité des menus.</p><p>Merci de vos réponses et de vos partages de bibliothèques, il sera interessant pour moi de les etudier par la suite !<br />Cordialement</p>]]></description>
			<author><![CDATA[dummy@example.com (Stalker2106)]]></author>
			<pubDate>Mon, 21 Jan 2013 10:27:51 +0000</pubDate>
			<guid>http://forum.ubuntu-fr.org/viewtopic.php?pid=12285891#p12285891</guid>
		</item>
		<item>
			<title><![CDATA[Réponse à&#160;:  [C++] Sondage: programmes de chiffrement amateur. [Resolu]]]></title>
			<link>http://forum.ubuntu-fr.org/viewtopic.php?pid=12285751#p12285751</link>
			<description><![CDATA[<div class="quotebox"><blockquote><div><p>Les differents cryptages sont evidemment simpliste le but n&#039;etant pas de concurrencer certains algo biens connus, mais surtout de mettre en pratique les bases du C++ en employant de la gestion de fichier en ecriture, lecture, de la gestion I/O avec du cout cin, getline ou encore des test de securité ( avec des conditions &quot;si le fichier est deja codé alors&quot; ) qui impliquent une gestion des differentes issues du programme.</p></div></blockquote></div><p>Dans ce cas c&#039;est un bon exercice, et je vous invite à vous pencher sur les bibliothèques existantes pour l&#039;interface (histoire de mettre en pratique l&#039;utilisation de bibliothèques tierces par exemple) !</p><br /><p>Par contre du coup je ne suis pas assez compétent en développement C++ pour donner un avis pertinent sur telle ou telle méthode de gestion des I/O etc.</p><p>Mais je suis capable de dire que CRYPTconsol ne sait pas gérer la chaîne &quot;toto&quot; sans afficher une erreur, il y a donc des améliorations à faire au niveau de la gestion des erreurs <img src="http://forum.ubuntu-fr.org/img/smilies/big_smile.png" width="15" height="15" alt="big_smile" /></p>]]></description>
			<author><![CDATA[dummy@example.com (tiramiseb)]]></author>
			<pubDate>Mon, 21 Jan 2013 10:19:52 +0000</pubDate>
			<guid>http://forum.ubuntu-fr.org/viewtopic.php?pid=12285751#p12285751</guid>
		</item>
		<item>
			<title><![CDATA[Réponse à&#160;:  [C++] Sondage: programmes de chiffrement amateur. [Resolu]]]></title>
			<link>http://forum.ubuntu-fr.org/viewtopic.php?pid=12285701#p12285701</link>
			<description><![CDATA[<p>Oui désolé, je suis du genre à pas prendre de pincettes (la diplomatie est hors de mon champ de compétences)... <img src="http://forum.ubuntu-fr.org/img/smilies/smile.png" width="15" height="15" alt="smile" /></p>]]></description>
			<author><![CDATA[dummy@example.com (tiramiseb)]]></author>
			<pubDate>Mon, 21 Jan 2013 10:17:20 +0000</pubDate>
			<guid>http://forum.ubuntu-fr.org/viewtopic.php?pid=12285701#p12285701</guid>
		</item>
		<item>
			<title><![CDATA[Réponse à&#160;:  [C++] Sondage: programmes de chiffrement amateur. [Resolu]]]></title>
			<link>http://forum.ubuntu-fr.org/viewtopic.php?pid=12285681#p12285681</link>
			<description><![CDATA[<p>D&#039;abord, merci d&#039;avoir consacré du temps à vous pencher sur nos programme, d&#039;autre part, il est evident qu&#039;aucun de nous deux n&#039;a la prétention d&#039;affirmer que ce logiciel sera utilisé par les internautes: je le dis et je le répetes, il n&#039;est pas ici question de faire quelque chose de propre et de soigné ( bien que cela aurait été préfèrable je vous l&#039;accorde. )<br />Les differents cryptages sont evidemment simpliste le but n&#039;etant pas de concurrencer certains algo biens connus, mais surtout de mettre en pratique les bases du C++ en employant de la gestion de fichier en ecriture, lecture, de la gestion I/O avec du cout cin, getline ou encore des test de securité ( avec des conditions &quot;si le fichier est deja codé alors&quot; ) qui impliquent une gestion des differentes issues du programme.</p><p>Je prends vos remarques de maniere constructive et j&#039;attends avec impatience la suite !<br />Cordialement</p>]]></description>
			<author><![CDATA[dummy@example.com (Stalker2106)]]></author>
			<pubDate>Mon, 21 Jan 2013 10:16:34 +0000</pubDate>
			<guid>http://forum.ubuntu-fr.org/viewtopic.php?pid=12285681#p12285681</guid>
		</item>
		<item>
			<title><![CDATA[Réponse à&#160;:  [C++] Sondage: programmes de chiffrement amateur. [Resolu]]]></title>
			<link>http://forum.ubuntu-fr.org/viewtopic.php?pid=12285651#p12285651</link>
			<description><![CDATA[<p>Non vous êtes pas nuls, c&#039;est juste que les conseils sont des fois dit d&#039;une manière directe, ne le prenez pas mal !!</p><p>c&#039;est vrai que par exemple une archive avec le code et l&#039;executable c&#039;est pas dur à faire ... et tu la met en téléchargement !!<br />voili voilà <img src="http://forum.ubuntu-fr.org/img/smilies/roll.png" width="15" height="15" alt="roll" /></p>]]></description>
			<author><![CDATA[dummy@example.com (sogyam)]]></author>
			<pubDate>Mon, 21 Jan 2013 10:15:48 +0000</pubDate>
			<guid>http://forum.ubuntu-fr.org/viewtopic.php?pid=12285651#p12285651</guid>
		</item>
		<item>
			<title><![CDATA[Réponse à&#160;:  [C++] Sondage: programmes de chiffrement amateur. [Resolu]]]></title>
			<link>http://forum.ubuntu-fr.org/viewtopic.php?pid=12285531#p12285531</link>
			<description><![CDATA[<p>Si la question est &quot;nos méthodes de chiffrement sont-elles bonnes ?&quot;, alors la réponse est clairement &quot;elles sont nulles&quot;.</p><p>S&#039;il s&#039;agit de s&#039;entraîner à programmer, bah ça vous ferait un bon exercice d&#039;améliorer vos codes <img src="http://forum.ubuntu-fr.org/img/smilies/smile.png" width="15" height="15" alt="smile" /></p>]]></description>
			<author><![CDATA[dummy@example.com (tiramiseb)]]></author>
			<pubDate>Mon, 21 Jan 2013 10:09:50 +0000</pubDate>
			<guid>http://forum.ubuntu-fr.org/viewtopic.php?pid=12285531#p12285531</guid>
		</item>
		<item>
			<title><![CDATA[Réponse à&#160;:  [C++] Sondage: programmes de chiffrement amateur. [Resolu]]]></title>
			<link>http://forum.ubuntu-fr.org/viewtopic.php?pid=12285501#p12285501</link>
			<description><![CDATA[<p>Bref: on est nul</p>]]></description>
			<author><![CDATA[dummy@example.com (Destroyers)]]></author>
			<pubDate>Mon, 21 Jan 2013 10:07:24 +0000</pubDate>
			<guid>http://forum.ubuntu-fr.org/viewtopic.php?pid=12285501#p12285501</guid>
		</item>
		<item>
			<title><![CDATA[Réponse à&#160;:  [C++] Sondage: programmes de chiffrement amateur. [Resolu]]]></title>
			<link>http://forum.ubuntu-fr.org/viewtopic.php?pid=12285261#p12285261</link>
			<description><![CDATA[<p>Tu aurais pu donner les sources sous forme d&#039;archives, c&#039;est pénible de lire comme ça sur le forum...</p><p>-----------------</p><br /><p>Houla mais vos chiffrements sont super simplistes ! En terme de sécurité, c&#039;est nullissime.<br />C&#039;est presque plus du codage que du chiffrement...<br />On n&#039;est pas loin du ROT13...</p><p>Je vous laisse jeter un oeil par là :<br /><a href="http://fr.wikipedia.org/wiki/Chiffrement">http://fr.wikipedia.org/wiki/Chiffrement</a><br /><a href="http://fr.wikipedia.org/wiki/Data_Encryption_Standard">http://fr.wikipedia.org/wiki/Data_Encryption_Standard</a><br /><a href="http://fr.wikipedia.org/wiki/Triple_DES">http://fr.wikipedia.org/wiki/Triple_DES</a><br /><a href="http://fr.wikipedia.org/wiki/Standard_de_chiffrement_avanc%C3%A9">http://fr.wikipedia.org/wiki/Standard_d … vanc%C3%A9</a></p><p>Par ailleurs je n&#039;arrive pas à comprendre pourquoi vos codes parlent de hashage.<br />Vous savez ce que c&#039;est, le hashage ?<br /><a href="http://fr.wikipedia.org/wiki/Fonction_de_hachage">http://fr.wikipedia.org/wiki/Fonction_de_hachage</a></p>]]></description>
			<author><![CDATA[dummy@example.com (tiramiseb)]]></author>
			<pubDate>Mon, 21 Jan 2013 09:55:34 +0000</pubDate>
			<guid>http://forum.ubuntu-fr.org/viewtopic.php?pid=12285261#p12285261</guid>
		</item>
		<item>
			<title><![CDATA[Réponse à&#160;:  [C++] Sondage: programmes de chiffrement amateur. [Resolu]]]></title>
			<link>http://forum.ubuntu-fr.org/viewtopic.php?pid=12285181#p12285181</link>
			<description><![CDATA[<p>On voulais surtout avoir des avis d&#039;utilisateurs ^^&#039;<br />mais puisqu&#039;on y est, voici les code:<br />(ne faites pas de remarques sur la méthode que nous avons employés pour remplacer les caractères, ce sont des switch: peu performants, mais a notre niveau)</p><p>Sources de CRYPTconsol:</p><div class="codebox"><pre class="vscroll"><code>/*
CHOSES A FAIRE:

-ajouter une langue (anglais).
-ajouter une option pour chiffrer directement les fichiers.
*/

//main.cpp

#include&quot;header.h&quot;


char langue;


int main()
{

	 std::cout&lt;&lt;&quot;\n\nBienvenue dans votre logiciel de cryptage &#039;CRYPTconsol&#039; (Beta 2.0).\n&quot;;
	 std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(),&#039;\n&#039;);

	 bool entree_valide (false);  //savoir si l&#039;entrée est valide
	 bool i(true);   //le programme s&#039;arrete si i==false
	 code txt;   //on instancie un texte de type code.
	 short int choix;  //le choix de l&#039;action de l&#039;utilisateur

       	 while (i)
       	 {
            	do
            	{
                	std::string s;
                	std::cout&lt;&lt;&quot;\n\n&quot;;
                	std::cout&lt;&lt;&quot;Tapez 1 pour manipuler votre texte,&quot;;
			if(txt.get_ecrit()) //indique si un texte est présent, crypté ou non, et indique la taille du texte
			{
				if(txt.get_crypte())
				{
					std::cout&lt;&lt;&quot; (un texte est actuellement présent (&quot; &lt;&lt;txt.get_taille()&lt;&lt;&quot; caractères) et chiffré)\n&quot;;
				}
				else
				{
					std::cout&lt;&lt;&quot; (un texte est actuellement présent (&quot; &lt;&lt;txt.get_taille()&lt;&lt;&quot; caractères) et non chiffré)\n&quot;;
				}
			}
			else
			{
				std::cout&lt;&lt;&quot; (aucun actuellement)\n&quot;;
			}

                std::cout&lt;&lt;&quot;tapez 2 pour voir votre texte,\n&quot;;
                std::cout&lt;&lt;&quot;tapez 3 pour enregistrer votre texte dans un fichier,\n&quot;;
                std::cout&lt;&lt;&quot;tapez 4 pour importer votre texte depuis un fichier,\n&quot;;
                std::cout&lt;&lt;&quot;tapez 5 pour afficher l&#039;historique de développement,\n&quot;;
                std::cout&lt;&lt;&quot;tapez 6 pour quitter votre logiciel de cryptage CRYPTconsol.\n \n&quot;;

                std::getline(std::cin,s);
                std::istringstream iss(s);  //cette partie permet de ne pas planter le programme si
                                            // on entre des lettres (car &quot;choix&quot; est de type int)
                entree_valide = (iss &gt;&gt; choix);
    			
                    if(!entree_valide)
                    {
                        std::cout &lt;&lt; &quot;Erreur: choix inexistant.\n&quot;;
    					std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(),&#039;\n&#039;);
                    }

            } while(!entree_valide);

            switch(choix)
            {
                case 1:
                	menu_texte(txt);
                	break;

                case 2:
                	txt.afficher_message();
                	break;

                case 3:
                	txt.exporter();
                	break;

                case 4:
                	menu_importer(txt);
                	break;

                case 5:
                	affiche_historique();
                	break;

                case 6:
                	i=false;
                	break;

                default:
                	std::cout&lt;&lt;&quot;Erreur, choix inexistant.\n&quot;;
                break;
            }
    	}

    return 0;
}</code></pre></div><div class="codebox"><pre class="vscroll"><code>//action.h

#ifndef action
#define action

#include&quot;header.h&quot;


class code
{
	protected:
	std::string phrase; //contient le texte
	int taille;  //contient le nombre de caractères du texte
	bool ecrit; //savoir si &quot;phrase&quot; est vide (false) ou si il contient un texte (true)
	bool crypte;//savoir si &quot;phrase&quot; est chiffré(true) ou non(false)

	public:
	code();

	void verifier_ecrire();//verifie si un texte est présent
	void ecrire();
	void afficher_message()const;
	void supprimer();
	void coder_decoder();//vérifie si le texte doit etre chiffré  ou déchiffré
	void coder();
	void decoder();
	void exporter() const;
	void importer();//importe un fichié crypté
	void importer_exterieur();//importe un fichier non crypté

	bool get_ecrit() const;
	bool get_crypte() const;
	int get_taille() const;

};

void affiche_historique();
void menu_texte(code&amp; txt);
void menu_importer(code&amp; txt);

#endif</code></pre></div><div class="codebox"><pre class="vscroll"><code>//action.cpp

#include&quot;action.h&quot;


code::code() : taille(0), ecrit(false), crypte(false) 
{
}


void code::verifier_ecrire()
//verifie si un texte est déjà présent ou non
{	
	if(ecrit)
	{
		bool entree_valide;
		short int choix;
		do
		{
			std::cout&lt;&lt;&quot;Attention, un texte est déjà présent:\n&quot;;
			std::cout&lt;&lt;&quot;tapez 1 pour continuer,\n&quot;;
			std::cout&lt;&lt;&quot;tapez 2 pour annuler.\n&quot;;		
			std::string s;
			std::getline(std::cin,s);
        		std::istringstream iss(s);  //cette partie permet de ne pas planter le programme si
                                        	// on entre des lettres (car &quot;choix&quot; est de type int)
        		entree_valide = (iss &gt;&gt; choix);
			if(!entree_valide||(choix!=1 &amp;&amp; choix!=2))
			{
				std::cout&lt;&lt;&quot;Erreur: choix inexistant.\n&quot;;
			}

		}while(!entree_valide||(choix!=1 &amp;&amp; choix!=2));

		if(choix==1)
		{
			ecrire();
		}
		else
		{
			std::cout&lt;&lt;&quot;Texte intacte.\n&quot;;
  		    	std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);
		}
	}
	else
	{
		ecrire();
	}
}


void code::ecrire()
//écrire un texte
{
	std::cout&lt;&lt;&quot;Entrez votre texte: \n&quot;;
    	std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);   //si on enlève cette ligne, ça marche pas...
    	std::getline(std::cin, phrase);
    
    	if(phrase.size()==0)
    	{
        	std::cout&lt;&lt;&quot;Erreur: une erreur est survenue lors de l&#039;entrée de votre texte.\n&quot;;
		std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);

	}
	else
	{
	    	std::cout&lt;&lt;&quot;Votre texte est prêt.\n&quot;;
		ecrit=true;
		taille=phrase.size()-1;
	    	std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);
	}
}


void code::afficher_message() const
//affiche le texte en cours
{
    std::cout&lt;&lt;&quot;Vous voulez afficher votre texte: ... \n&quot;;
    if(ecrit==true)
    {
        	std::cout&lt;&lt;phrase&lt;&lt;&#039;\n&#039;;
		std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);
		std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);
    }
    else if(ecrit==false)
    {
        	std::cout&lt;&lt;&quot;Erreur: aucun texte n&#039;est présent.\n&quot;;
		std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);
		std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);
    }

}


void code::supprimer()
//supprime le texte en cours
{
	bool entree_valide;
	do{
		std::cout&lt;&lt;&quot;voulez vous vraiment supprimer votre texte ?\n (tapez oui, non, o, n)\n&quot;;	
		std::string choix;
		std::getline(std::cin,choix);
		for(unsigned int i=0;i&lt;choix.size();i++)
		{
			tolower(choix[i]); 	//on met les caracteres en minuscules pour que la condition les reconnaisse
		}	
		if(choix==&quot;oui&quot;||choix==&quot;yes&quot;||choix==&quot;o&quot;||choix==&quot;y&quot;)
		{
			entree_valide=true;
			std::cout&lt;&lt;&quot;Vous voulez supprimer votre texte: ... \n&quot;;
 			if(ecrit==true)
   		    	{
				phrase=&quot;&quot;;
				ecrit=false;
				crypte=false;
				taille=0;
     		    		std::cout&lt;&lt;&quot;Votre texte a bien été supprimé.\n&quot;;
				std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);
				std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);
   	  	    	}
   	 	    	else if(ecrit==false)
   	 	    	{
        			std::cout&lt;&lt;&quot;Erreur: aucun texte n&#039;est présent.\n&quot;;
				std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);
				std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);
       			}
		}	
   		else if(choix==&quot;non&quot;||choix==&quot;no&quot;||choix==&quot;n&quot;)
		{
			entree_valide=true;
			std::cout&lt;&lt;&quot;Votre texte est intacte.\n&quot;;
			std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);
			std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);
		}
		else
		{
			std::cout&lt;&lt;&quot;Erreur: choix inexistant.\n&quot;;
			std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);
			std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);
			entree_valide=false;
		}

	}while(!entree_valide);
}


void code::coder_decoder()
//vérifie si le texte est chiffré ou non
{
	if(crypte)
	{
		decoder();
	}
	else
	{
		coder();
	}
}


void code::coder()
//chiffre le texte
{
    	std::cout&lt;&lt;&quot;Vous voulez crypter votre texte: ... \n&quot;;
    	if(ecrit==true &amp;&amp; crypte==false)
    	{
		srand(time(0));
        	short int choix(rand()%4);  //on détermine aléatoirement le type d&#039;encodage

        	switch(choix)
        	{
			case 0:
			    	choix0(phrase);
			   	crypte=true;
			    	std::cout&lt;&lt;&quot;Votre texte a bien été chiffré.\n&quot;;
			   	std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);
			   	std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);
			   	break;

			case 1:
			    	choix1(phrase);
			    	crypte=true;
			    	std::cout&lt;&lt;&quot;Votre texte a bien été chiffré.\n&quot;;
			   	std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);
			    	std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);
			    	break;

			case 2:
			    	choix2(phrase);
			    	crypte=true;
			    	std::cout&lt;&lt;&quot;Votre texte a bien été chiffré.\n&quot;;
			   	std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);
			    	std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);
			    	break;

			case 3:
			    	choix3(phrase);
			    	crypte=true;
			    	std::cout&lt;&lt;&quot;Votre texte a bien été chiffré.\n&quot;;
			   	std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);
			    	std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);
			    	break;

			case 4:
			    	choix4(phrase);
			    	crypte=true;
			    	std::cout&lt;&lt;&quot;Votre texte a bien été chiffré.\n&quot;;
			   	std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);
			    	std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);
			    	break;
		}
		phrase+=&#039;*&#039;; //on ajoute une étoile comme signature de CRYPTconsol

		short int premier(rand()%5);  //on ajoute un caractère au début et à la fin aléatoirement, sans aucune signification (sécurité)
		if(premier==0)
		{
			std::string temporaire;
			temporaire+=&#039;$&#039;;
			for(unsigned int i=0;i&lt;phrase.size();i++)
			{
				temporaire+=phrase[i];
			}
			phrase=temporaire;
			phrase+=&#039;p&#039;;
			taille=phrase.size()-4;
		}
		else if(premier==1)
		{
			std::string temporaire;
			temporaire+=&#039;Q&#039;;
			for(unsigned int i=0;i&lt;phrase.size();i++)
			{
				temporaire+=phrase[i];
			}
			phrase=temporaire;
			phrase+=&#039;p&#039;;
			taille=phrase.size()-4;
		}
		else if(premier==2)
		{
			std::string temporaire;
			temporaire+=&#039;%&#039;;
			for(unsigned int i=0;i&lt;phrase.size();i++)
			{
				temporaire+=phrase[i];
			}
		phrase=temporaire;
		taille=phrase.size()-3;
		}
		else
		{
			taille=phrase.size()-2;
		}
		
	}
	else if(ecrit==true &amp;&amp; crypte==true)
	{
		std::cout&lt;&lt;&quot;Impossible de chiffrer votre texte car il est déjà crypté.\n&quot;;
		std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);
		std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);
	}
    	else if(ecrit==false)
    	{
        	std::cout&lt;&lt;&quot;Erreur: aucun texte n&#039;est présent.\n&quot;;
		std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);
    		std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);
    	}
   	else
    	{
        	std::cout&lt;&lt;&quot;Erreur: une erreur inconue est survenue.\n&quot;;
		std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);
    		std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);
    	}

}


void code::decoder()
//déchiffre le texte
{
    std::cout&lt;&lt;&quot;Vous voulez déchiffrer votre texte: ... \n&quot;;
    if(crypte==true)
    {
		char premier=phrase[0]; //on supprime le premier et le dernier caractère potentiellements présents qui n&#039;ont aucune signification (sécurité)
		if(premier==&#039;$&#039;||premier==&#039;Q&#039;||premier==&#039;%&#039;)
		{
			if(premier==&#039;$&#039;||premier==&#039;Q&#039;)
			{
				phrase.erase(phrase.size()-1,1);
			}
			phrase.erase(0,1);
		}

        	decode(phrase);
		phrase.erase(0,1); //on efface le type d&#039;encodage
		phrase.erase(phrase.size()-1,1); //on efface l&#039;étoile

        std::cout&lt;&lt;&quot;Votre texte a bien été déchiffré.\n&quot;;
	std::cout&lt;&lt;&quot;Voici le contenu:\n\n&quot;&lt;&lt;phrase&lt;&lt;&quot;\n\n&quot;;
	std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);
	std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);
        crypte=false;
	taille=phrase.size();
    }
    else if(crypte==false &amp;&amp; ecrit==true)
    {
        std::cout&lt;&lt;&quot;Erreur: vous ne pouvez pas déchiffrer un texte non crypté.\n&quot;;
		std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);
		std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);
    }
    else if(ecrit==false)
    {
        std::cout&lt;&lt;&quot;Erreur: aucun texte n&#039;est présent.\n&quot;;
		std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);
		std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);
    }
    else
    {
        std::cout&lt;&lt;&quot;Erreur: une erreur inconue est survenue.\n&quot;;
		std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);
		std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);
    }

}


 void code::exporter() const
 //enregistrer le texte dans un fichier
{
	    std::cout&lt;&lt;&quot;Vous voulez enregistrer votre texte dans un fichier: ... \n&quot;;
	    if(ecrit)
	    {
			std::string fichier;
			std::cout&lt;&lt;&quot;Entrez le chemin où votre fichier sera enregitré. \n&quot;;
			std::cout&lt;&lt;&quot;Terminez par le nom de votre fichier puis l&#039;extention texte de votre choix. \n&quot;;
			std::cout&lt;&lt;&quot;(tapez 1 pour annuler). \n&quot;;
			std::getline(std::cin,fichier);
			std::ofstream flux (fichier.c_str()); //on ouvre un fichier là ou l&#039;utilisateur le veux
			if(fichier==&quot;1&quot;)
			{
				std::cout&lt;&lt;&quot;Vous avez annulé l&#039;enregistrement.\n&quot;;
			}
			else if(flux)
			{
				flux&lt;&lt;phrase;
				std::cout&lt;&lt;&quot;Votre fichier a été enregistré avec succès.\n&quot;;
				std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);
				std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);
			}
			else
			{
			    	std::cout&lt;&lt;&quot;Erreur: une erreur est survenue lors de la création du fichier.\n&quot;;
			    	std::cout&lt;&lt;&quot;avez vous correctement entré le chemin ?\n&quot;;
			    	std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);
				std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);
			}
	    }
	    else if (!ecrit)
	    {
		std::cout&lt;&lt;&quot;Erreur: aucun texte n&#039;est écrit.\n&quot;;
			std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);
			std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);
	    }
	    else
	    {
		std::cout&lt;&lt;&quot;Erreur: une erreur inconue vient de se produire.\n&quot;;
			std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);
			std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);
	    }
}


void code::importer()
//importer le texte crypté par CRYPTconsol depuis un fichier
{
	std::cout&lt;&lt;&quot;Vous voulez importer un texte crypté par CRYPTconsol depuis un fichier: \n&quot;;
	std::string chemin;
	std::cout&lt;&lt;&quot;Entrez le chemin où se trouve votre fichier.\n&quot;;
	std::cout&lt;&lt;&quot;terminez par le nom de votre fichier avec l&#039;extention (les majuscules doivent être respectées).\n&quot;;
	std::cout&lt;&lt;&quot;(tapez 1 pour annuler). \n&quot;;
	std::getline(std::cin,chemin);

    	std::ifstream flux (chemin.c_str());

	if(chemin==&quot;1&quot;)
	{
		std::cout&lt;&lt;&quot;Vous avez annulé l&#039;importation.\n&quot;;
	}

        else if(flux)
    	{
		int size; //contient la taille du fichier SANS les caractères ajoutés (* par exemple) donc la taille réele
	    	bool etoile; //savoir si l&#039;étoile est présente
		char dernier;//savoir quel est le dernier caractère (p ou *)
	    	char premier;//savoir quel est le premier caractère
		char deuxieme;//savoir quel est le deuxieme charactère (selon le premier)
		bool dernier_p;//savoir si le dernier caractère est un &quot;p&quot;
		int test; //contient la taille du fichier AVEC les caractères ajoutés (* par exemple) pour tout prendre du fhichier (voir la boucle for)

		flux.seekg(0,std::ios::end);
		size=flux.tellg();   // on enregistre la taille du fichier
		test=size;
		flux.seekg(0, std::ios::beg);
		flux.get(premier);   //on vérifie que le type d&#039;encodage est présent
		flux.seekg(1, std::ios::beg);
		flux.get(deuxieme);
		flux.seekg(-1,std::ios::end);
		flux.get(dernier);   // on verifie si le dernier caractère est une étoile
	   	if(dernier==&#039;*&#039;)
		{
	  		etoile=true;  //verifie si le dernier caractere est une étoile
			dernier_p=false;
			if(premier==&#039;%&#039;)
			{
				size-=3;
			}
			else
			{
				size-=2;
			}
   		}
		else if(dernier==&#039;p&#039;) //vérifie si l&#039;étoile est présente si le dernier caractère est un &quot;p&quot;	
		{
			size-=4;			
			flux.seekg(-2,std::ios::end);
			flux.get(dernier);
			dernier_p=true;
			if(dernier==&#039;*&#039;)
			{
	  			etoile=true;
			}
			else
			{
				etoile=false;
			}
		}
		else
		{
			etoile=false;
			dernier_p=false;
		}

        if(size==0)
        {
			std::cout&lt;&lt;&quot;Erreur: le fichier que vous avez indiqué est vide.\n&quot;;
			std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);
			std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);
        }
        else if(size!=0)
        {
		if(etoile==true &amp;&amp; (((premier==&#039;0&#039;||premier==&#039;M&#039;||premier==&#039;1&#039; || premier==&#039;L&#039;||premier==&#039;2&#039;||premier==&#039;j&#039;||premier==&#039;3&#039;||premier==&#039;!&#039;||premier==&#039;4&#039;||premier==&#039;b&#039;||premier==&#039;%&#039;) &amp;&amp;(dernier_p==false))||(dernier_p==true &amp;&amp; (premier==&#039;$&#039; || premier==&#039;Q&#039;)&amp;&amp;(deuxieme==&#039;0&#039; || deuxieme==&#039;M&#039; ||deuxieme==&#039;1&#039; || deuxieme==&#039;L&#039; || deuxieme==&#039;2&#039; || deuxieme==&#039;j&#039;||premier==&#039;3&#039;||premier==&#039;!&#039;||premier==&#039;4&#039;||premier==&#039;b&#039;))||(premier==&#039;%&#039; &amp;&amp; dernier_p==false &amp;&amp;(deuxieme==&#039;0&#039; || deuxieme==&#039;M&#039; ||deuxieme==&#039;1&#039; || deuxieme==&#039;L&#039; || deuxieme==&#039;2&#039; || deuxieme==&#039;j&#039;||premier==&#039;3&#039;||premier==&#039;!&#039;||premier==&#039;4&#039;||premier==&#039;b&#039;))))
        	{
		flux.seekg(0, std::ios::beg);
		std::string texte;	   
            	for(int i(0); i&lt;test; i++)
            	{
                	texte+=flux.get();
            	}
                crypte=true;
                ecrit=true;
		taille=size;
                phrase=texte;
                std::cout&lt;&lt;&quot;Votre fichier a été ouvert avec succès et son contenu a été transféré avec succès.\n&quot;;
		std::cout&lt;&lt;&quot;Voici le contenu:\n\n&quot;&lt;&lt;phrase&lt;&lt;&quot;\n\n&quot;;
		std::cout&lt;&lt;&quot;-&quot;&lt;&lt;taille&lt;&lt;&quot; caractères ont été identifiés.\n&quot;;
		std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);
		std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);
            	}           
		else if(etoile==false||(premier!=&#039;0&#039; &amp;&amp; premier!=&#039;M&#039; &amp;&amp; premier!=&#039;1&#039;&amp;&amp; premier!=&#039;L&#039; &amp;&amp; premier!=&#039;2&#039;&amp;&amp; premier!=&#039;j&#039;&amp;&amp; premier!=&#039;3&#039;&amp;&amp; premier!=&#039;!&#039; &amp;&amp; premier!=&#039;4&#039;&amp;&amp; premier!=&#039;b&#039; &amp;&amp; premier!=&#039;$&#039; &amp;&amp; premier!=&#039;Q&#039;&amp;&amp; premier!=&#039;%&#039;)||(dernier_p==true &amp;&amp; premier!=&#039;$&#039; &amp;&amp; premier!=&#039;Q&#039;&amp;&amp; premier==&#039;%&#039;)||((premier==&#039;$&#039;|| premier==&#039;Q&#039;||premier==&#039;%&#039;)&amp;&amp;(deuxieme!=&#039;0&#039;&amp;&amp; premier!=&#039;M&#039;&amp;&amp; deuxieme!=&#039;1&#039; &amp;&amp; premier!=&#039;L&#039; &amp;&amp; deuxieme!=&#039;2&#039;&amp;&amp; premier!=&#039;j&#039;&amp;&amp; premier!=&#039;3&#039;&amp;&amp; premier!=&#039;!&#039; &amp;&amp; premier!=&#039;4&#039;&amp;&amp; premier!=&#039;b&#039;)))
            {
                std::cout&lt;&lt;&quot;Erreur:&quot;&lt;&lt;&#039;\n&#039;
                &lt;&lt;&quot;-soit le texte contenu dans votre fichier n&#039;est pas codé\n&quot;
                &lt;&lt;&quot;-soit votre fichier crypté n&#039;est pas originaire de CRYPTconsol\n&quot;
                &lt;&lt;&quot;-soit votre fichier a été modifié.\n&quot;;

		std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);
		std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);
            }
            else
            {
                std::cout&lt;&lt;&quot;Erreur: une erreur inconnue est survenue lors du transfert des donées.\n&quot;;
				std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);
				std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);

            }
        }
        else
        {
			std::cout&lt;&lt;&quot;Erreur: une erreur inconnue vient de se produire.\n&quot;;
			std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);
			std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);
        }
    }
    else
    {
        std::cout&lt;&lt;&quot;Erreur: il y a eu une erreur lors de l&#039;ouverture du fichier.\n&quot;;
		std::cout&lt;&lt;&quot;l&#039;extention de votre fichier, est-elle correcte ? (.txt .odt .doc ...)\n&quot;;
        std::cout&lt;&lt;&quot;avez vous correctement entré le chemin ?\n&quot;;
		std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);
		std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);

    }

}


void code::importer_exterieur()
//importer un texte non crypté
{
	std::cout&lt;&lt;&quot;Vous voulez importer un texte non crypté depuis un fichier: \n&quot;;
    	std::string chemin;
    	std::cout&lt;&lt;&quot;Entrez le chemin où se trouve votre fichier.\n&quot;;
    	std::cout&lt;&lt;&quot;terminez par le nom de votre fichier avec l&#039;extention (les majuscules doivent être respectées).\n&quot;;
        std::cout&lt;&lt;&quot;(tapez 1 pour annuler). \n&quot;;
    	std::getline(std::cin,chemin);


    	std::ifstream flux (chemin.c_str());

	if(chemin==&quot;1&quot;)
	{
		std::cout&lt;&lt;&quot;Vous avez annulé l&#039;importation.\n&quot;;
	}

        else if(flux)
    	{
	 	int size; //nombre de caractères du fichier
	    	bool etoile; //vérifie si le fichier est crypté(ce qui ne serait pas normal)
		char dernier;
	    	char premier;
		char deuxieme;
		bool dernier_p;

		flux.seekg(0,std::ios::end);
		size=flux.tellg();   // on enregistre la taille du fichier
		flux.seekg(0, std::ios::beg);
		flux.get(premier);   //on vérifie que le type d&#039;encodage est présent
		flux.seekg(1, std::ios::beg);
		flux.get(deuxieme);
		flux.seekg(-1,std::ios::end);
		flux.get(dernier);   // on verifie si le dernier caractère est une étoile

	   	if(dernier==&#039;*&#039;)
		{
	  		etoile=true;       //on vérifie si le texte n&#039;est pas déjà crypté
			dernier_p=false;
   		}
		else if(dernier==&#039;p&#039;)
		{
			flux.seekg(-2,std::ios::end);
			flux.get(dernier);
			dernier_p=true;
			if(dernier==&#039;*&#039;)
			{
	  			etoile=true;
			}
			else
			{
				etoile=false;
			}
		}
		else
		{
			etoile=false;
			dernier_p=false;
		}

	    if(size==0)
	    {
			std::cout&lt;&lt;&quot;Erreur: le fichier que vous avez indiqué est vide.\n&quot;;
			std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);
			std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);
	    }
	    else if(size!=0)
	    {
		if(etoile==true &amp;&amp; (((premier==&#039;0&#039;||premier==&#039;M&#039;||premier==&#039;1&#039; || premier==&#039;L&#039;||premier==&#039;2&#039;||premier==&#039;j&#039;||premier==&#039;3&#039;||premier==&#039;!&#039;||premier==&#039;4&#039;||premier==&#039;b&#039;||premier==&#039;%&#039;) &amp;&amp;(dernier_p==false))||(dernier_p==true &amp;&amp; (premier==&#039;$&#039; || premier==&#039;Q&#039;)&amp;&amp;(deuxieme==&#039;0&#039; || deuxieme==&#039;M&#039; ||deuxieme==&#039;1&#039; || deuxieme==&#039;L&#039; || deuxieme==&#039;2&#039; || deuxieme==&#039;j&#039;||premier==&#039;3&#039;||premier==&#039;!&#039;||premier==&#039;4&#039;||premier==&#039;b&#039;))||(premier==&#039;%&#039; &amp;&amp; dernier_p==false &amp;&amp;(deuxieme==&#039;0&#039; || deuxieme==&#039;M&#039; ||deuxieme==&#039;1&#039; || deuxieme==&#039;L&#039; || deuxieme==&#039;2&#039; || deuxieme==&#039;j&#039;||premier==&#039;3&#039;||premier==&#039;!&#039;||premier==&#039;4&#039;||premier==&#039;b&#039;))))
           	{
			std::cout&lt;&lt;&quot;Erreur: le texte contenu est déjà crypté par CRYPTconsol.\n&quot;;
           	}                        
           	else
           	{
            		flux.seekg(0, std::ios::beg);
			std::string texte;	  
		     	for(int i(0); i&lt;size; i++)
		       	{
		       	 	texte+=flux.get();
		  	}
			crypte=false;
		       	ecrit=true;
			taille=size;
            		phrase=texte;
	            	std::cout&lt;&lt;&quot;Votre fichier a été ouvert avec succès et son contenu a été transféré avec succès.\n&quot;;
			std::cout&lt;&lt;&quot;Voici le contenu:\n\n&quot;&lt;&lt;phrase&lt;&lt;&quot;\n\n&quot;;
			std::cout&lt;&lt;&quot;-&quot;&lt;&lt;taille&lt;&lt;&quot; caractères ont été identifiés.\n&quot;;
			std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);
			std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);
	    	}
        }
        else
        {
			std::cout&lt;&lt;&quot;Erreur: une erreur inconnue vient de se produire.\n&quot;;
			std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);
			std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);
        }
	}
	else
    {
    	std::cout&lt;&lt;&quot;Erreur: il y a eu une erreur lors de l&#039;ouverture du fichier.\n&quot;;
	std::cout&lt;&lt;&quot;l&#039;extention de votre fichier, est-elle correcte ? (.txt .odt .doc ...)\n&quot;;
        std::cout&lt;&lt;&quot;avez vous correctement entré le chemin ?\n&quot;;
	std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);
	std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);

    }
}


bool code::get_ecrit() const
{

	return ecrit;
}


bool code::get_crypte() const
{

	return crypte;
}


int code::get_taille() const
{

	return taille;
}



void affiche_historique()
{
	std::cout&lt;&lt;&quot;\n\n\nHistorique de développement:\n\n\n&quot;;

	std::cout&lt;&lt;&quot;alpha 1.0:\n\n&quot;;
	std::cout&lt;&lt;&quot;-ajout de la fonctionnalié &#039;écrire&#039;\n&quot;;
	std::cout&lt;&lt;&quot;-ajout de la fonctionnalié &#039;afficher&#039;\n&quot;;
	std::cout&lt;&lt;&quot;-ajout de la fonctionnalié &#039;chiffrer&#039;\n&quot;;
	std::cout&lt;&lt;&quot;-ajout de la fonctionnalié &#039;enregistrer&#039;\n&quot;;

	std::cout&lt;&lt;&quot;\n\nalpha 1.2:\n\n&quot;;
	std::cout&lt;&lt;&quot;-ajout de la fonctionnalié &#039;déchiffrer&#039;\n&quot;;
	std::cout&lt;&lt;&quot;-augmentation du nombre de type d&#039;encodage\n&quot;;

	std::cout&lt;&lt;&quot;\n\nbeta 1.0:\n\n&quot;;
	std::cout&lt;&lt;&quot;-ajout de la fonctionnalié &#039;supprimer&#039;\n&quot;;
	std::cout&lt;&lt;&quot;-ajout de la fonctionnalié &#039;importer un texte chiffré&#039;\n&quot;;
	std::cout&lt;&lt;&quot;-ergonimie améliorée\n&quot;;

	std::cout&lt;&lt;&quot;\n\nbeta 1.2:\n\n&quot;;
	std::cout&lt;&lt;&quot;-ajout de la fonctionnalié &#039;importer un texte non chiffré&#039;\n&quot;;
	std::cout&lt;&lt;&quot;-performances processeur améliorées\n&quot;;
	std::cout&lt;&lt;&quot;-sécurité du chiffrement améliorée\n&quot;;
	std::cout&lt;&lt;&quot;-augmentation du nombre de type d&#039;encodage\n&quot;;
	std::cout&lt;&lt;&quot;-ajout d&#039;un historique de développement\n&quot;;

	std::cout&lt;&lt;&quot;\n\nbeta 1.3:\n\n&quot;;
	std::cout&lt;&lt;&quot;-correction de divers bugs\n&quot;;
	std::cout&lt;&lt;&quot;-performances mémoire améliorées\n&quot;;
	std::cout&lt;&lt;&quot;-sécurité du chiffrement améliorée\n&quot;;
	std::cout&lt;&lt;&quot;-ergonimie améliorée\n&quot;;

	std::cout&lt;&lt;&quot;\n\nbeta 1.8:\n\n&quot;;
	std::cout&lt;&lt;&quot;-gestion des majuscules\n&quot;;
	std::cout&lt;&lt;&quot;-gestion de divers nouveaux caractères\n&quot;;
	std::cout&lt;&lt;&quot;-les caractères non gérés sont simplement ignorés\n&quot;;
	std::cout&lt;&lt;&quot;-augmentation du nombre de type d&#039;encodage\n&quot;;

	std::cout&lt;&lt;&quot;\n\nbeta 2.0:\n\n&quot;;
	std::cout&lt;&lt;&quot;-augmentation des performances\n&quot;;
	std::cout&lt;&lt;&quot;-correction de divers bugs\n&quot;;

	std::cout&lt;&lt;&quot;\nRemontez pour voir les mises à jour plus anciennes.\n&quot;;


	std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);
	std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), &#039;\n&#039;);
}


void menu_texte(code&amp; txt)
{
	bool entree_valide=false;
	short int choix;
    	bool i(true);   //la boucle s&#039;arrete si i==false
	std::cout&lt;&lt;&quot;Vous voulez manipuler votre texte:\n\n&quot;;
	
	while(i)
	{
		do
		{
			std::cout&lt;&lt;&quot;\n\n\n&quot;;
			std::cout&lt;&lt;&quot;tapez 1 pour écrire un nouveau texte,&quot;;
			if(txt.get_ecrit())
				{
				if(txt.get_crypte()) //indique si un texte est présent, crypté ou non, et indique la taille du texte
				{
					std::cout&lt;&lt;&quot; (un texte est actuellement présent (&quot; &lt;&lt;txt.get_taille()&lt;&lt;&quot; caractères) et chiffré)\n&quot;;
				}
				else
				{
					std::cout&lt;&lt;&quot; (un texte est actuellement présent (&quot; &lt;&lt;txt.get_taille()&lt;&lt;&quot; caractères) et non chiffré)\n&quot;;
				}

			}
			else
			{
				std::cout&lt;&lt;&quot; (aucun actuellement)\n&quot;;
			}
			std::cout&lt;&lt;&quot;tapez 2 pour supprimer votre texte,\n&quot;;
			std::cout&lt;&lt;&quot;tapez 3 pour chiffrer/déchiffrer votre texte,\n&quot;;
			std::cout&lt;&lt;&quot;tapez 4 pour retourner au menu précédent.\n&quot;;

			std::string s;
			std::getline(std::cin,s);
			std::istringstream iss(s);  //cette partie permet de ne pas planter le programme si
				                            // on entre des lettres (car &quot;choix&quot; est de type int)
			entree_valide = (iss &gt;&gt; choix);    			
			if(!entree_valide)
			{
				std::cout &lt;&lt; &quot;Erreur: choix inexistant.\n&quot;;
		    		std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(),&#039;\n&#039;);
			}

		}while(!entree_valide);

		switch(choix)
		{
		        case 1:
		        	txt.verifier_ecrire();
				i=false;
		        	break;

			case 2:
				txt.supprimer();
				i=false;
				break;

			case 3:
				txt.coder_decoder();
				i=false;
				break;

			case 4:
				i=false;
				break;

			default:
				std::cout&lt;&lt;&quot;Erreur, choix inexistant.\n&quot;;
				break;
		}
	}
}


void menu_importer(code&amp; txt)
{
	bool entree_valide=false;
	short int choix;
    	bool i(true);   //la boucle s&#039;arrete si i==false
	std::cout&lt;&lt;&quot;Vous voulez importer un texte depuis un fichier:\n\n&quot;;

	while(i)
	{
		do
		{
			std::cout&lt;&lt;&quot;\n\n\n&quot;;
			std::cout&lt;&lt;&quot;tapez 1 pour importer un texte déjà chiffré par CRYPTconsol,\n&quot;;
			std::cout&lt;&lt;&quot;tapez 2 pour importer un texte non chiffré,\n&quot;;
			std::cout&lt;&lt;&quot;tapez 3 pour retourner au menu précédent.\n&quot;;

			std::string s;
			std::getline(std::cin,s);
			std::istringstream iss(s);  //cette partie permet de ne pas planter le programme si
				                            // on entre des lettres (car &quot;choix&quot; est de type int)
			entree_valide = (iss &gt;&gt; choix);    			
			if(!entree_valide)
			{
				std::cout &lt;&lt; &quot;Erreur: choix inexistant.\n&quot;;
		    		std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(),&#039;\n&#039;);
			}

		}while(!entree_valide);

		switch(choix)
		{
		        case 1:
		        	txt.importer();
				i=false;
		        	break;

			case 2:
				txt.importer_exterieur();
				i=false;
				break;

			case 3:
				i=false;
				break;

			default:
				std::cout&lt;&lt;&quot;Erreur, choix inexistant.\n&quot;;
				break;
		}
	}
}</code></pre></div><div class="codebox"><pre><code>//codage.h

#ifndef codage
#define codage

#include&quot;header.h&quot;

void choix0(std::string&amp; a); //les diverses fonctions de chiffrement selon l&#039;encodage
void choix1(std::string&amp; a);
void choix2(std::string&amp; a);
void choix3(std::string&amp; a);
void choix4(std::string&amp; a);

void decode(std::string&amp; a); //fonction de déchiffrage


#endif</code></pre></div><div class="codebox"><pre class="vscroll"><code>//codage.cpp

#include&quot;codage.h&quot;


void choix0(std::string&amp; a)
{
	std::string temporaire=&quot;&quot;;
	srand(time(0));
        short int choix(rand()%2);
	if (choix==0)
	{
		temporaire+=&#039;M&#039;;
	}
	else
	{
		temporaire+=&#039;0&#039;;
	}
	for(unsigned int i=0;i&lt;a.size();i++) //on décale toutes les lettres pour que
	{					//le premier caractère soit le type d&#039;encodage.
		temporaire+=a[i];
	}
	a=temporaire;

    for(unsigned int i=1; i&lt;a.size();i++)
    {
	switch(a[i])
	{
		case &#039;a&#039;:
		a[i]=&#039;l&#039;;
		break;

		case &#039;b&#039;:
		a[i]=&#039;|&#039;;
		break;

		case &#039;c&#039;:
		a[i]=&#039;1&#039;;
		break;

		case &#039;d&#039;:
		a[i]=&#039;3&#039;;
		break;

		case &#039;e&#039;:
		a[i]=&#039;b&#039;;
		break;

		case &#039;f&#039;:
		a[i]=&#039;\&#039;&#039;;
		break;

		case &#039;g&#039;:
		a[i]=&#039;2&#039;;
		break;

		case &#039;h&#039;:
		a[i]=&#039;/&#039;;
		break;

		case &#039;i&#039;:
		a[i]=&#039;Z&#039;;
		break;

		case &#039;j&#039;:
		a[i]=&#039;q&#039;;
		break;

		case &#039;k&#039;:
		a[i]=&#039;@&#039;;
		break;

		case &#039;l&#039;:
		a[i]=&#039;A&#039;;
		break;

		case &#039;m&#039;:
		a[i]=&#039;U&#039;;
		break;

		case &#039;n&#039;:
		a[i]=&#039;k&#039;;
		break;

		case &#039;o&#039;:
		a[i]=&#039;&gt;&#039;;
		break;

		case &#039;p&#039;:
		a[i]=&#039;:&#039;;
		break;

		case &#039;q&#039;:
		a[i]=&#039;\\&#039;;
		break;

		case &#039;r&#039;:
		a[i]=&#039;X&#039;;
		break;

		case &#039;s&#039;:
		a[i]=&#039;n&#039;;
		break;

		case &#039;t&#039;:
		a[i]=&#039;d&#039;;
		break;

		case &#039;u&#039;:
		a[i]=&#039;I&#039;;
		break;

		case &#039;v&#039;:
		a[i]=&#039;T&#039;;
		break;

		case &#039;w&#039;:
		a[i]=&#039;Y&#039;;
		break;

		case &#039;x&#039;:
		a[i]=&#039;f&#039;;
		break;

		case &#039;y&#039;:
		a[i]=&#039;v&#039;;
		break;

		case &#039;z&#039;:
		a[i]=&#039;R&#039;;
		break;

		case &#039; &#039;:
		a[i]=&#039;&amp;&#039;;
		break;

		case &#039;0&#039;:
		a[i]=&#039;g&#039;;
		break;

		case &#039;1&#039;:
		a[i]=&#039;{&#039;;
		break;

		case &#039;2&#039;:
		a[i]=&#039;4&#039;;
		break;

		case &#039;3&#039;:
		a[i]=&#039;(&#039;;
		break;

		case &#039;4&#039;:
		a[i]=&#039;H&#039;;
		break;

		case &#039;5&#039;:
		a[i]=&#039;-&#039;;
		break;

		case &#039;6&#039;:
		a[i]=&#039;j&#039;;
		break;

		case &#039;7&#039;:
		a[i]=&#039;N&#039;;
		break;

		case &#039;8&#039;:
		a[i]=&#039;C&#039;;
		break;

		case &#039;9&#039;:
		a[i]=&#039;c&#039;;
		break;

		case &#039;A&#039;:
		a[i]=&#039;+&#039;;
		break;

		case &#039;B&#039;:
		a[i]=&#039;O&#039;;
		break;

		case &#039;C&#039;:
		a[i]=&#039;&quot;&#039;;
		break;

		case &#039;D&#039;:
		a[i]=&#039;e&#039;;
		break;

		case &#039;E&#039;:
		a[i]=&#039;u&#039;;
		break;

		case &#039;F&#039;:
		a[i]=&#039;D&#039;;
		break;

		case &#039;G&#039;:
		a[i]=&#039;0&#039;;
		break;

		case &#039;H&#039;:
		a[i]=&#039;t&#039;;
		break;

		case &#039;I&#039;:
		a[i]=&#039;x&#039;;
		break;

		case &#039;J&#039;:
		a[i]=&#039;K&#039;;
		break;

		case &#039;K&#039;:
		a[i]=&#039;_&#039;;
		break;

		case &#039;L&#039;:
		a[i]=&#039;s&#039;;
		break;

		case &#039;M&#039;:
		a[i]=&#039;7&#039;;
		break;

		case &#039;N&#039;:
		a[i]=&#039;F&#039;;
		break;

		case &#039;O&#039;:
		a[i]=&#039;m&#039;;
		break;

		case &#039;P&#039;:
		a[i]=&#039;6&#039;;
		break;

		case &#039;Q&#039;:
		a[i]=&#039;L&#039;;
		break;

		case &#039;R&#039;:
		a[i]=&#039;S&#039;;
		break;

		case &#039;S&#039;:
		a[i]=&#039;B&#039;;
		break;

		case &#039;T&#039;:
		a[i]=&#039;G&#039;;
		break;

		case &#039;U&#039;:
		a[i]=&#039;}&#039;;
		break;

		case &#039;V&#039;:
		a[i]=&#039;5&#039;;
		break;

		case &#039;W&#039;:
		a[i]=&#039;y&#039;;
		break;

		case &#039;X&#039;:
		a[i]=&#039;h&#039;;
		break;

		case &#039;Y&#039;:
		a[i]=&#039;]&#039;;
		break;

		case &#039;Z&#039;:
		a[i]=&#039;Q&#039;;
		break;

		case &#039;&amp;&#039;:
		a[i]=&#039;V&#039;;
		break;

		case &#039;&quot;&#039;:
		a[i]=&#039;?&#039;;
		break;

		case &#039;\&#039;&#039;:
		a[i]=&#039;8&#039;;
		break;

		case &#039;(&#039;:
		a[i]=&#039;r&#039;;
		break;

		case &#039;-&#039;:
		a[i]=&#039;w&#039;;
		break;

		case &#039;_&#039;:
		a[i]=&#039;i&#039;;
		break;

		case &#039;)&#039;:
		a[i]=&#039;)&#039;;
		break;

		case &#039;=&#039;:
		a[i]=&#039;a&#039;;
		break;

		case &#039;+&#039;:
		a[i]=&#039; &#039;;
		break;

		case &#039;#&#039;:
		a[i]=&#039;z&#039;;
		break;

		case &#039;{&#039;:
		a[i]=&#039;P&#039;;
		break;

		case &#039;[&#039;:
		a[i]=&#039;9&#039;;
		break;

		case &#039;|&#039;:
		a[i]=&#039;o&#039;;
		break;

		case &#039;\\&#039;:
		a[i]=&#039;;&#039;;
		break;

		case &#039;@&#039;:
		a[i]=&#039;&lt;&#039;;
		break;

		case &#039;]&#039;:
		a[i]=&#039;,&#039;;
		break;

		case &#039;}&#039;:
		a[i]=&#039;E&#039;;
		break;

		case &#039;$&#039;:
		a[i]=&#039;$&#039;;
		break;

		case &#039;,&#039;:
		a[i]=&#039;J&#039;;
		break;

		case &#039;;&#039;:
		a[i]=&#039;!&#039;;
		break;

		case &#039;:&#039;:
		a[i]=&#039;.&#039;;
		break;

		case &#039;!&#039;:
		a[i]=&#039;#&#039;;
		break;

		case &#039;%&#039;:
		a[i]=&#039;[&#039;;
		break;

		case &#039;?&#039;:
		a[i]=&#039;=&#039;;
		break;

		case &#039;~&#039;:
		a[i]=&#039;M&#039;;
		break;

		case &#039;.&#039;:
		a[i]=&#039;%&#039;;
		break;

		case &#039;/&#039;:
		a[i]=&#039;W&#039;;
		break;

		case &#039;&lt;&#039;:
		a[i]=&#039;p&#039;;
		break;

		case &#039;&gt;&#039;:
		a[i]=&#039;~&#039;;
		break;

		case &#039;\n&#039;:
		break;


		default:
		std::cout&lt;&lt;&quot;Attention: un caractère n&#039;a pas été reconnu... Abandon.\n&quot;;
		break;
		    }
	}
}


void choix1(std::string&amp; a)
{	
	std::string temporaire=&quot;&quot;;
	srand(time(0));
        short int choix(rand()%2);
	if (choix==0)
	{
		temporaire+=&#039;L&#039;;
	}
	else
	{
		temporaire+=&#039;1&#039;;
	}
	for(unsigned int i=0;i&lt;a.size();i++) //on décale toutes les lettres pour que
	{					//le premier caractère soit le type d&#039;encodage.
		temporaire+=a[i];
	}
	a=temporaire;
    	for(unsigned int i=1; i&lt;a.size();i++)
    	{
		switch(a[i])
		{
        		case &#039;a&#039;:
			a[i]=&#039;7&#039;;
			break;

			case &#039;b&#039;:
			a[i]=&#039;N&#039;;
			break;

			case &#039;c&#039;:
			a[i]=&#039;9&#039;;
			break;

			case &#039;d&#039;:
			a[i]=&#039;]&#039;;
			break;

			case &#039;e&#039;:
			a[i]=&#039;a&#039;;
			break;

			case &#039;f&#039;:
			a[i]=&#039;:&#039;;
			break;

			case &#039;g&#039;:
			a[i]=&#039;?&#039;;
			break;

			case &#039;h&#039;:
			a[i]=&#039;2&#039;;
			break;

			case &#039;i&#039;:
			a[i]=&#039;c&#039;;
			break;

			case &#039;j&#039;:
			a[i]=&#039;b&#039;;
			break;

			case &#039;k&#039;:
			a[i]=&#039;|&#039;;
			break;

			case &#039;l&#039;:
			a[i]=&#039;B&#039;;
			break;

			case &#039;m&#039;:
			a[i]=&#039;l&#039;;
			break;

			case &#039;n&#039;:
			a[i]=&#039;_&#039;;
			break;

			case &#039;o&#039;:
			a[i]=&#039;U&#039;;
			break;

			case &#039;p&#039;:
			a[i]=&#039;3&#039;;
			break;

			case &#039;q&#039;:
			a[i]=&#039;R&#039;;
			break;

			case &#039;r&#039;:
			a[i]=&#039;~&#039;;
			break;

			case &#039;s&#039;:
			a[i]=&#039;V&#039;;
			break;

			case &#039;t&#039;:
			a[i]=&#039;e&#039;;
			break;

			case &#039;u&#039;:
			a[i]=&#039;n&#039;;
			break;

			case &#039;v&#039;:
			a[i]=&#039;=&#039;;
			break;

			case &#039;w&#039;:
			a[i]=&#039;(&#039;;
			break;

			case &#039;x&#039;:
			a[i]=&#039;W&#039;;
			break;

			case &#039;y&#039;:
			a[i]=&#039;G&#039;;
			break;

			case &#039;z&#039;:
			a[i]=&#039;)&#039;;
			break;

			case &#039; &#039;:
			a[i]=&#039; &#039;;
			break;

			case &#039;0&#039;:
			a[i]=&#039;x&#039;;
			break;

			case &#039;1&#039;:
			a[i]=&#039;&lt;&#039;;
			break;

			case &#039;2&#039;:
			a[i]=&#039;t&#039;;
			break;

			case &#039;3&#039;:
			a[i]=&#039;g&#039;;
			break;

			case &#039;4&#039;:
			a[i]=&#039;Z&#039;;
			break;

			case &#039;5&#039;:
			a[i]=&#039;/&#039;;
			break;

			case &#039;6&#039;:
			a[i]=&#039;d&#039;;
			break;

			case &#039;7&#039;:
			a[i]=&#039;&amp;&#039;;
			break;

			case &#039;8&#039;:
			a[i]=&#039;O&#039;;
			break;

			case &#039;9&#039;:
			a[i]=&#039;y&#039;;
			break;

			case &#039;A&#039;:
			a[i]=&#039;C&#039;;
			break;

			case &#039;B&#039;:
			a[i]=&#039;s&#039;;
			break;

			case &#039;C&#039;:
			a[i]=&#039;A&#039;;
			break;

			case &#039;D&#039;:
			a[i]=&#039;1&#039;;
			break;

			case &#039;E&#039;:
			a[i]=&#039;u&#039;;
			break;

			case &#039;F&#039;:
			a[i]=&#039;i&#039;;
			break;

			case &#039;G&#039;:
			a[i]=&#039;}&#039;;
			break;

			case &#039;H&#039;:
			a[i]=&#039;6&#039;;
			break;

			case &#039;I&#039;:
			a[i]=&#039;{&#039;;
			break;

			case &#039;J&#039;:
			a[i]=&#039;\&#039;&#039;;
			break;

			case &#039;K&#039;:
			a[i]=&#039;4&#039;;
			break;

			case &#039;L&#039;:
			a[i]=&#039;S&#039;;
			break;

			case &#039;M&#039;:
			a[i]=&#039;@&#039;;
			break;

			case &#039;N&#039;:
			a[i]=&#039;F&#039;;
			break;

			case &#039;O&#039;:
			a[i]=&#039;v&#039;;
			break;

			case &#039;P&#039;:
			a[i]=&#039;r&#039;;
			break;

			case &#039;Q&#039;:
			a[i]=&#039;K&#039;;
			break;

			case &#039;R&#039;:
			a[i]=&#039;z&#039;;
			break;

			case &#039;S&#039;:
			a[i]=&#039;5&#039;;
			break;

			case &#039;T&#039;:
			a[i]=&#039;+&#039;;
			break;

			case &#039;U&#039;:
			a[i]=&#039;Q&#039;;
			break;

			case &#039;V&#039;:
			a[i]=&#039;p&#039;;
			break;

			case &#039;W&#039;:
			a[i]=&#039;E&#039;;
			break;

			case &#039;X&#039;:
			a[i]=&#039;#&#039;;
			break;

			case &#039;Y&#039;:
			a[i]=&#039;L&#039;;
			break;

			case &#039;Z&#039;:
			a[i]=&#039;f&#039;;
			break;

			case &#039;&amp;&#039;:
			a[i]=&#039;Y&#039;;
			break;

			case &#039;&quot;&#039;:
			a[i]=&#039;0&#039;;
			break;

			case &#039;\&#039;&#039;:
			a[i]=&#039;.&#039;;
			break;

			case &#039;(&#039;:
			a[i]=&#039;I&#039;;
			break;

			case &#039;-&#039;:
			a[i]=&#039;w&#039;;
			break;

			case &#039;_&#039;:
			a[i]=&#039;o&#039;;
			break;

			case &#039;)&#039;:
			a[i]=&#039;H&#039;;
			break;

			case &#039;=&#039;:
			a[i]=&#039;%&#039;;
			break;

			case &#039;+&#039;:
			a[i]=&#039;q&#039;;
			break;

			case &#039;#&#039;:
			a[i]=&#039;[&#039;;
			break;

			case &#039;{&#039;:
			a[i]=&#039;h&#039;;
			break;

			case &#039;[&#039;:
			a[i]=&#039;!&#039;;
			break;

			case &#039;|&#039;:
			a[i]=&#039;-&#039;;
			break;

			case &#039;\\&#039;:
			a[i]=&#039;J&#039;;
			break;

			case &#039;@&#039;:
			a[i]=&#039;T&#039;;
			break;

			case &#039;]&#039;:
			a[i]=&#039;k&#039;;
			break;

			case &#039;}&#039;:
			a[i]=&#039;8&#039;;
			break;

			case &#039;$&#039;:
			a[i]=&#039;$&#039;;
			break;

			case &#039;,&#039;:
			a[i]=&#039;;&#039;;
			break;

			case &#039;;&#039;:
			a[i]=&#039;D&#039;;
			break;

			case &#039;:&#039;:
			a[i]=&#039;&gt;&#039;;
			break;

			case &#039;!&#039;:
			a[i]=&#039;m&#039;;
			break;

			case &#039;%&#039;:
			a[i]=&#039;\\&#039;;
			break;

			case &#039;?&#039;:
			a[i]=&#039;j&#039;;
			break;

			case &#039;~&#039;:
			a[i]=&#039;P&#039;;
			break;

			case &#039;.&#039;:
			a[i]=&#039;&quot;&#039;;
			break;

			case &#039;/&#039;:
			a[i]=&#039;X&#039;;
			break;

			case &#039;&lt;&#039;:
			a[i]=&#039;M&#039;;
			break;

			case &#039;&gt;&#039;:
			a[i]=&#039;,&#039;;
			break;

			case &#039;\n&#039;:
			break;

			default:
			std::cout&lt;&lt;&quot;Attention: un caractère n&#039;a pas été reconnu... Abandon.\n&quot;;
			break;
		}
	}
}


void choix2(std::string&amp; a)
{
	std::string temporaire=&quot;&quot;;
	srand(time(0));
        short int choix(rand()%2);
	if (choix==0)
	{
		temporaire+=&#039;j&#039;;
	}
	else
	{
		temporaire+=&#039;2&#039;;
	}
	for(unsigned int i=0;i&lt;a.size();i++) //on décale toutes les lettres pour que
	{					//le premier caractère soit le type d&#039;encodage.
		temporaire+=a[i];
	}
	a=temporaire;
    for(unsigned int i=1; i&lt;a.size();i++)
    {
		switch(a[i])
		{
			case &#039;a&#039;:
			a[i]=&#039;v&#039;;
			break;

			case &#039;b&#039;:
			a[i]=&#039;5&#039;;
			break;

			case &#039;c&#039;:
			a[i]=&#039;z&#039;;
			break;

			case &#039;d&#039;:
			a[i]=&#039;a&#039;;
			break;

			case &#039;e&#039;:
			a[i]=&#039;3&#039;;
			break;

			case &#039;f&#039;:
			a[i]=&#039;C&#039;;
			break;

			case &#039;g&#039;:
			a[i]=&#039;D&#039;;
			break;

			case &#039;h&#039;:
			a[i]=&#039;R&#039;;
			break;

			case &#039;i&#039;:
			a[i]=&#039;N&#039;;
			break;

			case &#039;j&#039;:
			a[i]=&#039;Q&#039;;
			break;

			case &#039;k&#039;:
			a[i]=&#039;T&#039;;
			break;

			case &#039;l&#039;:
			a[i]=&#039;e&#039;;
			break;

			case &#039;m&#039;:
			a[i]=&#039;/&#039;;
			break;

			case &#039;n&#039;:
			a[i]=&#039;Y&#039;;
			break;

			case &#039;o&#039;:
			a[i]=&#039;$&#039;;
			break;

			case &#039;p&#039;:
			a[i]=&#039;d&#039;;
			break;

			case &#039;q&#039;:
			a[i]=&#039;P&#039;;
			break;

			case &#039;r&#039;:
			a[i]=&#039;I&#039;;
			break;

			case &#039;s&#039;:
			a[i]=&#039;A&#039;;
			break;

			case &#039;t&#039;:
			a[i]=&#039;f&#039;;
			break;

			case &#039;u&#039;:
			a[i]=&#039;&gt;&#039;;
			break;

			case &#039;v&#039;:
			a[i]=&#039;;&#039;;
			break;

			case &#039;w&#039;:
			a[i]=&#039;X&#039;;
			break;

			case &#039;x&#039;:
			a[i]=&#039;u&#039;;
			break;

			case &#039;y&#039;:
			a[i]=&#039;2&#039;;
			break;

			case &#039;z&#039;:
			a[i]=&#039;}&#039;;
			break;

			case &#039; &#039;:
			a[i]=&#039;=&#039;;
			break;

			case &#039;0&#039;:
			a[i]=&#039;n&#039;;
			break;

			case &#039;1&#039;:
			a[i]=&#039;]&#039;;
			break;

			case &#039;2&#039;:
			a[i]=&#039;#&#039;;
			break;

			case &#039;3&#039;:
			a[i]=&#039;M&#039;;
			break;

			case &#039;4&#039;:
			a[i]=&#039;{&#039;;
			break;

			case &#039;5&#039;:
			a[i]=&#039;8&#039;;
			break;

			case &#039;6&#039;:
			a[i]=&#039;9&#039;;
			break;

			case &#039;7&#039;:
			a[i]=&#039;k&#039;;
			break;

			case &#039;8&#039;:
			a[i]=&#039;.&#039;;
			break;

			case &#039;9&#039;:
			a[i]=&#039;&amp;&#039;;
			break;

			case &#039;A&#039;:
			a[i]=&#039;b&#039;;
			break;

			case &#039;B&#039;:
			a[i]=&#039;Z&#039;;
			break;

			case &#039;C&#039;:
			a[i]=&#039;:&#039;;
			break;

			case &#039;D&#039;:
			a[i]=&#039;~&#039;;
			break;

			case &#039;E&#039;:
			a[i]=&#039;!&#039;;
			break;

			case &#039;F&#039;:
			a[i]=&#039;)&#039;;
			break;

			case &#039;G&#039;:
			a[i]=&#039;V&#039;;
			break;

			case &#039;H&#039;:
			a[i]=&#039;+&#039;;
			break;

			case &#039;I&#039;:
			a[i]=&#039;O&#039;;
			break;

			case &#039;J&#039;:
			a[i]=&#039;p&#039;;
			break;

			case &#039;K&#039;:
			a[i]=&#039;W&#039;;
			break;

			case &#039;L&#039;:
			a[i]=&#039;y&#039;;
			break;

			case &#039;M&#039;:
			a[i]=&#039;m&#039;;
			break;

			case &#039;N&#039;:
			a[i]=&#039;h&#039;;
			break;

			case &#039;O&#039;:
			a[i]=&#039;-&#039;;
			break;

			case &#039;P&#039;:
			a[i]=&#039;t&#039;;
			break;

			case &#039;Q&#039;:
			a[i]=&#039;s&#039;;
			break;

			case &#039;R&#039;:
			a[i]=&#039;&quot;&#039;;
			break;

			case &#039;S&#039;:
			a[i]=&#039;w&#039;;
			break;

			case &#039;T&#039;:
			a[i]=&#039;B&#039;;
			break;

			case &#039;U&#039;:
			a[i]=&#039;J&#039;;
			break;

			case &#039;V&#039;:
			a[i]=&#039;[&#039;;
			break;

			case &#039;W&#039;:
			a[i]=&#039;_&#039;;
			break;

			case &#039;X&#039;:
			a[i]=&#039;K&#039;;
			break;

			case &#039;Y&#039;:
			a[i]=&#039;q&#039;;
			break;

			case &#039;Z&#039;:
			a[i]=&#039;6&#039;;
			break;

			case &#039;&amp;&#039;:
			a[i]=&#039;r&#039;;
			break;

			case &#039;&quot;&#039;:
			a[i]=&#039;,&#039;;
			break;

			case &#039;\&#039;&#039;:
			a[i]=&#039;E&#039;;
			break;

			case &#039;(&#039;:
			a[i]=&#039;G&#039;;
			break;

			case &#039;-&#039;:
			a[i]=&#039;0&#039;;
			break;

			case &#039;_&#039;:
			a[i]=&#039;1&#039;;
			break;

			case &#039;)&#039;:
			a[i]=&#039;F&#039;;
			break;

			case &#039;=&#039;:
			a[i]=&#039;L&#039;;
			break;

			case &#039;+&#039;:
			a[i]=&#039;@&#039;;
			break;

			case &#039;#&#039;:
			a[i]=&#039;c&#039;;
			break;

			case &#039;{&#039;:
			a[i]=&#039;\&#039;&#039;;
			break;

			case &#039;[&#039;:
			a[i]=&#039;o&#039;;
			break;

			case &#039;|&#039;:
			a[i]=&#039;U&#039;;
			break;

			case &#039;\\&#039;:
			a[i]=&#039;x&#039;;
			break;

			case &#039;@&#039;:
			a[i]=&#039;|&#039;;
			break;

			case &#039;]&#039;:
			a[i]=&#039;7&#039;;
			break;

			case &#039;}&#039;:
			a[i]=&#039;&lt;&#039;;
			break;

			case &#039;$&#039;:
			a[i]=&#039;S&#039;;
			break;

			case &#039;,&#039;:
			a[i]=&#039;g&#039;;
			break;

			case &#039;;&#039;:
			a[i]=&#039;4&#039;;
			break;

			case &#039;:&#039;:
			a[i]=&#039; &#039;;
			break;

			case &#039;!&#039;:
			a[i]=&#039;H&#039;;
			break;

			case &#039;%&#039;:
			a[i]=&#039;i&#039;;
			break;

			case &#039;?&#039;:
			a[i]=&#039;j&#039;;
			break;

			case &#039;~&#039;:
			a[i]=&#039;%&#039;;
			break;

			case &#039;.&#039;:
			a[i]=&#039;(&#039;;
			break;

			case &#039;/&#039;:
			a[i]=&#039;l&#039;;
			break;

			case &#039;&lt;&#039;:
			a[i]=&#039;\\&#039;;
			break;

			case &#039;&gt;&#039;:
			a[i]=&#039;?&#039;;
			break;

			case &#039;\n&#039;:
			break;

			default:
			std::cout&lt;&lt;&quot;Attention: un caractère n&#039;a pas été reconnu... Abandon.\n&quot;;
			break;
		}

    	}
}


void choix3(std::string&amp; a)
{
	std::string temporaire=&quot;&quot;;
	srand(time(0));
        short int choix(rand()%2);
	if (choix==0)
	{
		temporaire+=&#039;!&#039;;
	}
	else
	{
		temporaire+=&#039;3&#039;;
	}
	for(unsigned int i=0;i&lt;a.size();i++) //on décale toutes les lettres pour que
	{					//le premier caractère soit le type d&#039;encodage.
		temporaire+=a[i];
	}
	a=temporaire;
    for(unsigned int i=1; i&lt;a.size();i++)
    {
		switch(a[i])
		{
			case &#039;a&#039;:
			a[i]=&#039;d&#039;;
			break;

			case &#039;b&#039;:
			a[i]=&#039;N&#039;;
			break;

			case &#039;c&#039;:
			a[i]=&#039;v&#039;;
			break;

			case &#039;d&#039;:
			a[i]=&#039;9&#039;;
			break;

			case &#039;e&#039;:
			a[i]=&#039;H&#039;;
			break;

			case &#039;f&#039;:
			a[i]=&#039;g&#039;;
			break;

			case &#039;g&#039;:
			a[i]=&#039;:&#039;;
			break;

			case &#039;h&#039;:
			a[i]=&#039;w&#039;;
			break;

			case &#039;i&#039;:
			a[i]=&#039;X&#039;;
			break;

			case &#039;j&#039;:
			a[i]=&#039;G&#039;;
			break;

			case &#039;k&#039;:
			a[i]=&#039;J&#039;;
			break;

			case &#039;l&#039;:
			a[i]=&#039;T&#039;;
			break;

			case &#039;m&#039;:
			a[i]=&#039;7&#039;;
			break;

			case &#039;n&#039;:
			a[i]=&#039;a&#039;;
			break;

			case &#039;o&#039;:
			a[i]=&#039;\\&#039;;
			break;

			case &#039;p&#039;:
			a[i]=&#039;V&#039;;
			break;

			case &#039;q&#039;:
			a[i]=&#039;E&#039;;
			break;

			case &#039;r&#039;:
			a[i]=&#039;+&#039;;
			break;

			case &#039;s&#039;:
			a[i]=&#039;A&#039;;
			break;

			case &#039;t&#039;:
			a[i]=&#039;p&#039;;
			break;

			case &#039;u&#039;:
			a[i]=&#039;)&#039;;
			break;

			case &#039;v&#039;:
			a[i]=&#039;q&#039;;
			break;

			case &#039;w&#039;:
			a[i]=&#039; &#039;;
			break;

			case &#039;x&#039;:
			a[i]=&#039;Q&#039;;
			break;

			case &#039;y&#039;:
			a[i]=&#039;y&#039;;
			break;

			case &#039;z&#039;:
			a[i]=&#039;Y&#039;;
			break;

			case &#039; &#039;:
			a[i]=&#039;c&#039;;
			break;

			case &#039;0&#039;:
			a[i]=&#039;u&#039;;
			break;

			case &#039;1&#039;:
			a[i]=&#039;O&#039;;
			break;

			case &#039;2&#039;:
			a[i]=&#039;4&#039;;
			break;

			case &#039;3&#039;:
			a[i]=&#039;F&#039;;
			break;

			case &#039;4&#039;:
			a[i]=&#039;~&#039;;
			break;

			case &#039;5&#039;:
			a[i]=&#039;2&#039;;
			break;

			case &#039;6&#039;:
			a[i]=&#039;[&#039;;
			break;

			case &#039;7&#039;:
			a[i]=&#039;h&#039;;
			break;

			case &#039;8&#039;:
			a[i]=&#039;.&#039;;
			break;

			case &#039;9&#039;:
			a[i]=&#039;0&#039;;
			break;

			case &#039;A&#039;:
			a[i]=&#039;W&#039;;
			break;

			case &#039;B&#039;:
			a[i]=&#039;D&#039;;
			break;

			case &#039;C&#039;:
			a[i]=&#039;P&#039;;
			break;

			case &#039;D&#039;:
			a[i]=&#039;\&#039;&#039;;
			break;

			case &#039;E&#039;:
			a[i]=&#039;f&#039;;
			break;

			case &#039;F&#039;:
			a[i]=&#039;1&#039;;
			break;

			case &#039;G&#039;:
			a[i]=&#039;t&#039;;
			break;

			case &#039;H&#039;:
			a[i]=&#039;x&#039;;
			break;

			case &#039;I&#039;:
			a[i]=&#039;%&#039;;
			break;

			case &#039;J&#039;:
			a[i]=&#039;&gt;&#039;;
			break;

			case &#039;K&#039;:
			a[i]=&#039;Z&#039;;
			break;

			case &#039;L&#039;:
			a[i]=&#039;K&#039;;
			break;

			case &#039;M&#039;:
			a[i]=&#039;{&#039;;
			break;

			case &#039;N&#039;:
			a[i]=&#039;_&#039;;
			break;

			case &#039;O&#039;:
			a[i]=&#039;]&#039;;
			break;

			case &#039;P&#039;:
			a[i]=&#039;r&#039;;
			break;

			case &#039;Q&#039;:
			a[i]=&#039;U&#039;;
			break;

			case &#039;R&#039;:
			a[i]=&#039;?&#039;;
			break;

			case &#039;S&#039;:
			a[i]=&#039;&amp;&#039;;
			break;

			case &#039;T&#039;:
			a[i]=&#039;k&#039;;
			break;

			case &#039;U&#039;:
			a[i]=&#039;#&#039;;
			break;

			case &#039;V&#039;:
			a[i]=&#039;!&#039;;
			break;

			case &#039;W&#039;:
			a[i]=&#039;8&#039;;
			break;

			case &#039;X&#039;:
			a[i]=&#039;B&#039;;
			break;

			case &#039;Y&#039;:
			a[i]=&#039;I&#039;;
			break;

			case &#039;Z&#039;:
			a[i]=&#039;R&#039;;
			break;

			case &#039;&amp;&#039;:
			a[i]=&#039;}&#039;;
			break;

			case &#039;&quot;&#039;:
			a[i]=&#039;3&#039;;
			break;

			case &#039;\&#039;&#039;:
			a[i]=&#039;M&#039;;
			break;

			case &#039;(&#039;:
			a[i]=&#039;i&#039;;
			break;

			case &#039;-&#039;:
			a[i]=&#039;e&#039;;
			break;

			case &#039;_&#039;:
			a[i]=&#039;m&#039;;
			break;

			case &#039;)&#039;:
			a[i]=&#039;-&#039;;
			break;

			case &#039;=&#039;:
			a[i]=&#039;=&#039;;
			break;

			case &#039;+&#039;:
			a[i]=&#039;&quot;&#039;;
			break;

			case &#039;#&#039;:
			a[i]=&#039;S&#039;;
			break;

			case &#039;{&#039;:
			a[i]=&#039;@&#039;;
			break;

			case &#039;[&#039;:
			a[i]=&#039;/&#039;;
			break;

			case &#039;|&#039;:
			a[i]=&#039;n&#039;;
			break;

			case &#039;\\&#039;:
			a[i]=&#039;6&#039;;
			break;

			case &#039;@&#039;:
			a[i]=&#039;5&#039;;
			break;

			case &#039;]&#039;:
			a[i]=&#039;;&#039;;
			break;

			case &#039;}&#039;:
			a[i]=&#039;b&#039;;
			break;

			case &#039;$&#039;:
			a[i]=&#039;l&#039;;
			break;

			case &#039;,&#039;:
			a[i]=&#039;,&#039;;
			break;

			case &#039;;&#039;:
			a[i]=&#039;j&#039;;
			break;

			case &#039;:&#039;:
			a[i]=&#039;$&#039;;
			break;

			case &#039;!&#039;:
			a[i]=&#039;|&#039;;
			break;

			case &#039;%&#039;:
			a[i]=&#039;C&#039;;
			break;

			case &#039;?&#039;:
			a[i]=&#039;(&#039;;
			break;

			case &#039;~&#039;:
			a[i]=&#039;z&#039;;
			break;

			case &#039;.&#039;:
			a[i]=&#039;&lt;&#039;;
			break;

			case &#039;/&#039;:
			a[i]=&#039;L&#039;;
			break;

			case &#039;&lt;&#039;:
			a[i]=&#039;s&#039;;
			break;

			case &#039;&gt;&#039;:
			a[i]=&#039;o&#039;;
			break;

			case &#039;\n&#039;:
			break;

			default:
			std::cout&lt;&lt;&quot;Attention: un caractère n&#039;a pas été reconnu... Abandon.\n&quot;;
			break;
		}
	}
}


void choix4(std::string&amp; a)
{
	std::string temporaire=&quot;&quot;;
	srand(time(0));
        short int choix(rand()%2);
	if (choix==0)
	{
		temporaire+=&#039;b&#039;;
	}
	else
	{
		temporaire+=&#039;4&#039;;
	}
	for(unsigned int i=0;i&lt;a.size();i++) //on décale toutes les lettres pour que
	{					//le premier caractère soit le type d&#039;encodage.
		temporaire+=a[i];
	}
	a=temporaire;
    	for(unsigned int i=1; i&lt;a.size();i++)
    	{
		switch(a[i])
		{
			case &#039;a&#039;:
			a[i]=&#039;B&#039;;
			break;

			case &#039;b&#039;:
			a[i]=&#039;k&#039;;
			break;

			case &#039;c&#039;:
			a[i]=&#039;Y&#039;;
			break;

			case &#039;d&#039;:
			a[i]=&#039;]&#039;;
			break;

			case &#039;e&#039;:
			a[i]=&#039;b&#039;;
			break;

			case &#039;f&#039;:
			a[i]=&#039;V&#039;;
			break;

			case &#039;g&#039;:
			a[i]=&#039;&lt;&#039;;
			break;

			case &#039;h&#039;:
			a[i]=&#039;~&#039;;
			break;

			case &#039;i&#039;:
			a[i]=&#039;l&#039;;
			break;

			case &#039;j&#039;:
			a[i]=&#039;)&#039;;
			break;

			case &#039;k&#039;:
			a[i]=&#039;x&#039;;
			break;

			case &#039;l&#039;:
			a[i]=&#039;\&#039;&#039;;
			break;

			case &#039;m&#039;:
			a[i]=&#039;Z&#039;;
			break;

			case &#039;n&#039;:
			a[i]=&#039;O&#039;;
			break;

			case &#039;o&#039;:
			a[i]=&#039;W&#039;;
			break;

			case &#039;p&#039;:
			a[i]=&#039; &#039;;
			break;

			case &#039;q&#039;:
			a[i]=&#039;f&#039;;
			break;

			case &#039;r&#039;:
			a[i]=&#039;,&#039;;
			break;

			case &#039;s&#039;:
			a[i]=&#039;H&#039;;
			break;

			case &#039;t&#039;:
			a[i]=&#039;g&#039;;
			break;

			case &#039;u&#039;:
			a[i]=&#039;m&#039;;
			break;

			case &#039;v&#039;:
			a[i]=&#039;L&#039;;
			break;

			case &#039;w&#039;:
			a[i]=&#039;{&#039;;
			break;

			case &#039;x&#039;:
			a[i]=&#039;Q&#039;;
			break;

			case &#039;y&#039;:
			a[i]=&#039;1&#039;;
			break;

			case &#039;z&#039;:
			a[i]=&#039;o&#039;;
			break;

			case &#039; &#039;:
			a[i]=&#039;_&#039;;
			break;

			case &#039;0&#039;:
			a[i]=&#039;P&#039;;
			break;

			case &#039;1&#039;:
			a[i]=&#039;w&#039;;
			break;

			case &#039;2&#039;:
			a[i]=&#039;-&#039;;
			break;

			case &#039;3&#039;:
			a[i]=&#039;4&#039;;
			break;

			case &#039;4&#039;:
			a[i]=&#039;d&#039;;
			break;

			case &#039;5&#039;:
			a[i]=&#039;R&#039;;
			break;

			case &#039;6&#039;:
			a[i]=&#039;=&#039;;
			break;

			case &#039;7&#039;:
			a[i]=&#039;M&#039;;
			break;

			case &#039;8&#039;:
			a[i]=&#039;$&#039;;
			break;

			case &#039;9&#039;:
			a[i]=&#039;F&#039;;
			break;

			case &#039;A&#039;:
			a[i]=&#039;t&#039;;
			break;

			case &#039;B&#039;:
			a[i]=&#039;6&#039;;
			break;

			case &#039;C&#039;:
			a[i]=&#039;0&#039;;
			break;

			case &#039;D&#039;:
			a[i]=&#039;U&#039;;
			break;

			case &#039;E&#039;:
			a[i]=&#039;9&#039;;
			break;

			case &#039;F&#039;:
			a[i]=&#039;c&#039;;
			break;

			case &#039;G&#039;:
			a[i]=&#039;T&#039;;
			break;

			case &#039;H&#039;:
			a[i]=&#039;%&#039;;
			break;

			case &#039;I&#039;:
			a[i]=&#039;5&#039;;
			break;

			case &#039;J&#039;:
			a[i]=&#039;.&#039;;
			break;

			case &#039;K&#039;:
			a[i]=&#039;(&#039;;
			break;

			case &#039;L&#039;:
			a[i]=&#039;?&#039;;
			break;

			case &#039;M&#039;:
			a[i]=&#039;E&#039;;
			break;

			case &#039;N&#039;:
			a[i]=&#039;&quot;&#039;;
			break;

			case &#039;O&#039;:
			a[i]=&#039;}&#039;;
			break;

			case &#039;P&#039;:
			a[i]=&#039;8&#039;;
			break;

			case &#039;Q&#039;:
			a[i]=&#039;I&#039;;
			break;

			case &#039;R&#039;:
			a[i]=&#039;!&#039;;
			break;

			case &#039;S&#039;:
			a[i]=&#039;p&#039;;
			break;

			case &#039;T&#039;:
			a[i]=&#039;#&#039;;
			break;

			case &#039;U&#039;:
			a[i]=&#039;2&#039;;
			break;

			case &#039;V&#039;:
			a[i]=&#039;+&#039;;
			break;

			case &#039;W&#039;:
			a[i]=&#039;A&#039;;
			break;

			case &#039;X&#039;:
			a[i]=&#039;n&#039;;
			break;

			case &#039;Y&#039;:
			a[i]=&#039;z&#039;;
			break;

			case &#039;Z&#039;:
			a[i]=&#039;[&#039;;
			break;

			case &#039;&amp;&#039;:
			a[i]=&#039;S&#039;;
			break;

			case &#039;&quot;&#039;:
			a[i]=&#039;D&#039;;
			break;

			case &#039;\&#039;&#039;:
			a[i]=&#039;u&#039;;
			break;

			case &#039;(&#039;:
			a[i]=&#039;\\&#039;;
			break;

			case &#039;-&#039;:
			a[i]=&#039;@&#039;;
			break;

			case &#039;_&#039;:
			a[i]=&#039;G&#039;;
			break;

			case &#039;)&#039;:
			a[i]=&#039;i&#039;;
			break;

			case &#039;=&#039;:
			a[i]=&#039;3&#039;;
			break;

			case &#039;+&#039;:
			a[i]=&#039;C&#039;;
			break;

			case &#039;#&#039;:
			a[i]=&#039;;&#039;;
			break;

			case &#039;{&#039;:
			a[i]=&#039;7&#039;;
			break;

			case &#039;[&#039;:
			a[i]=&#039;X&#039;;
			break;

			case &#039;|&#039;:
			a[i]=&#039;r&#039;;
			break;

			case &#039;\\&#039;:
			a[i]=&#039;h&#039;;
			break;

			case &#039;@&#039;:
			a[i]=&#039;N&#039;;
			break;

			case &#039;]&#039;:
			a[i]=&#039;K&#039;;
			break;

			case &#039;}&#039;:
			a[i]=&#039;&amp;&#039;;
			break;

			case &#039;$&#039;:
			a[i]=&#039;s&#039;;
			break;

			case &#039;,&#039;:
			a[i]=&#039;&gt;&#039;;
			break;

			case &#039;;&#039;:
			a[i]=&#039;:&#039;;
			break;

			case &#039;:&#039;:
			a[i]=&#039;J&#039;;
			break;

			case &#039;!&#039;:
			a[i]=&#039;|&#039;;
			break;

			case &#039;%&#039;:
			a[i]=&#039;a&#039;;
			break;

			case &#039;?&#039;:
			a[i]=&#039;y&#039;;
			break;

			case &#039;~&#039;:
			a[i]=&#039;v&#039;;
			break;

			case &#039;.&#039;:
			a[i]=&#039;e&#039;;
			break;

			case &#039;/&#039;:
			a[i]=&#039;/&#039;;
			break;

			case &#039;&lt;&#039;:
			a[i]=&#039;q&#039;;
			break;

			case &#039;&gt;&#039;:
			a[i]=&#039;j&#039;;
			break;

			case &#039;\n&#039;:
			break;

			default:
			std::cout&lt;&lt;&quot;Attention: un caractère n&#039;a pas été reconnu... Abandon.\n&quot;;
			break;
		}
	}
}


void decode(std::string&amp; a)
{
	if(a[0]==&#039;0&#039; || a[0]==&#039;M&#039;)
	{
		for(unsigned int i=1; i&lt;a.size()-1;i++)
    		{
			switch(a[i])
			{
        			case &#039;l&#039;:
				a[i]=&#039;a&#039;;
				break;

				case &#039;|&#039;:
				a[i]=&#039;b&#039;;
				break;

				case &#039;1&#039;:
				a[i]=&#039;c&#039;;
				break;

				case &#039;3&#039;:
				a[i]=&#039;d&#039;;
				break;

				case &#039;b&#039;:
				a[i]=&#039;e&#039;;
				break;

				case &#039;\&#039;&#039;:
				a[i]=&#039;f&#039;;
				break;

				case &#039;2&#039;:
				a[i]=&#039;g&#039;;
				break;

				case &#039;/&#039;:
				a[i]=&#039;h&#039;;
				break;

				case &#039;Z&#039;:
				a[i]=&#039;i&#039;;
				break;

				case &#039;q&#039;:
				a[i]=&#039;j&#039;;
				break;

				case &#039;@&#039;:
				a[i]=&#039;k&#039;;
				break;

				case &#039;A&#039;:
				a[i]=&#039;l&#039;;
				break;

				case &#039;U&#039;:
				a[i]=&#039;m&#039;;
				break;

				case &#039;k&#039;:
				a[i]=&#039;n&#039;;
				break;

				case &#039;&gt;&#039;:
				a[i]=&#039;o&#039;;
				break;

				case &#039;:&#039;:
				a[i]=&#039;p&#039;;
				break;

				case &#039;\\&#039;:
				a[i]=&#039;q&#039;;
				break;

				case &#039;X&#039;:
				a[i]=&#039;r&#039;;
				break;

				case &#039;n&#039;:
				a[i]=&#039;s&#039;;
				break;

				case &#039;d&#039;:
				a[i]=&#039;t&#039;;
				break;

				case &#039;I&#039;:
				a[i]=&#039;u&#039;;
				break;

				case &#039;T&#039;:
				a[i]=&#039;v&#039;;
				break;

				case &#039;Y&#039;:
				a[i]=&#039;w&#039;;
				break;

				case &#039;f&#039;:
				a[i]=&#039;x&#039;;
				break;

				case &#039;v&#039;:
				a[i]=&#039;y&#039;;
				break;

				case &#039;R&#039;:
				a[i]=&#039;z&#039;;
				break;

				case &#039;&amp;&#039;:
				a[i]=&#039; &#039;;
				break;

				case &#039;g&#039;:
				a[i]=&#039;0&#039;;
				break;

				case &#039;{&#039;:
				a[i]=&#039;1&#039;;
				break;

				case &#039;4&#039;:
				a[i]=&#039;2&#039;;
				break;

				case &#039;(&#039;:
				a[i]=&#039;3&#039;;
				break;

				case &#039;H&#039;:
				a[i]=&#039;4&#039;;
				break;

				case &#039;-&#039;:
				a[i]=&#039;5&#039;;
				break;

				case &#039;j&#039;:
				a[i]=&#039;6&#039;;
				break;

				case &#039;N&#039;:
				a[i]=&#039;7&#039;;
				break;

				case &#039;C&#039;:
				a[i]=&#039;8&#039;;
				break;

				case &#039;c&#039;:
				a[i]=&#039;9&#039;;
				break;

				case &#039;+&#039;:
				a[i]=&#039;A&#039;;
				break;

				case &#039;O&#039;:
				a[i]=&#039;B&#039;;
				break;

				case &#039;&quot;&#039;:
				a[i]=&#039;C&#039;;
				break;

				case &#039;e&#039;:
				a[i]=&#039;D&#039;;
				break;

				case &#039;u&#039;:
				a[i]=&#039;E&#039;;
				break;

				case &#039;D&#039;:
				a[i]=&#039;F&#039;;
				break;

				case &#039;0&#039;:
				a[i]=&#039;G&#039;;
				break;

				case &#039;t&#039;:
				a[i]=&#039;H&#039;;
				break;

				case &#039;x&#039;:
				a[i]=&#039;I&#039;;
				break;

				case &#039;K&#039;:
				a[i]=&#039;J&#039;;
				break;

				case &#039;_&#039;:
				a[i]=&#039;K&#039;;
				break;

				case &#039;s&#039;:
				a[i]=&#039;L&#039;;
				break;

				case &#039;7&#039;:
				a[i]=&#039;M&#039;;
				break;

				case &#039;F&#039;:
				a[i]=&#039;N&#039;;
				break;

				case &#039;m&#039;:
				a[i]=&#039;O&#039;;
				break;

				case &#039;6&#039;:
				a[i]=&#039;P&#039;;
				break;

				case &#039;L&#039;:
				a[i]=&#039;Q&#039;;
				break;

				case &#039;S&#039;:
				a[i]=&#039;R&#039;;
				break;

				case &#039;B&#039;:
				a[i]=&#039;S&#039;;
				break;

				case &#039;G&#039;:
				a[i]=&#039;T&#039;;
				break;

				case &#039;}&#039;:
				a[i]=&#039;U&#039;;
				break;

				case &#039;5&#039;:
				a[i]=&#039;V&#039;;
				break;

				case &#039;y&#039;:
				a[i]=&#039;W&#039;;
				break;

				case &#039;h&#039;:
				a[i]=&#039;X&#039;;
				break;

				case &#039;]&#039;:
				a[i]=&#039;Y&#039;;
				break;

				case &#039;Q&#039;:
				a[i]=&#039;Z&#039;;
				break;

				case &#039;V&#039;:
				a[i]=&#039;&amp;&#039;;
				break;

				case &#039;?&#039;:
				a[i]=&#039;&quot;&#039;;
				break;

				case &#039;8&#039;:
				a[i]=&#039;\&#039;&#039;;
				break;

				case &#039;r&#039;:
				a[i]=&#039;(&#039;;
				break;

				case &#039;w&#039;:
				a[i]=&#039;-&#039;;
				break;

				case &#039;i&#039;:
				a[i]=&#039;_&#039;;
				break;

				case &#039;)&#039;:
				a[i]=&#039;)&#039;;
				break;

				case &#039;a&#039;:
				a[i]=&#039;=&#039;;
				break;

				case &#039; &#039;:
				a[i]=&#039;+&#039;;
				break;

				case &#039;z&#039;:
				a[i]=&#039;#&#039;;
				break;

				case &#039;P&#039;:
				a[i]=&#039;{&#039;;
				break;

				case &#039;9&#039;:
				a[i]=&#039;[&#039;;
				break;

				case &#039;o&#039;:
				a[i]=&#039;|&#039;;
				break;

				case &#039;;&#039;:
				a[i]=&#039;\\&#039;;
				break;

				case &#039;&lt;&#039;:
				a[i]=&#039;@&#039;;
				break;

				case &#039;,&#039;:
				a[i]=&#039;]&#039;;
				break;

				case &#039;E&#039;:
				a[i]=&#039;}&#039;;
				break;

				case &#039;$&#039;:
				a[i]=&#039;$&#039;;
				break;

				case &#039;J&#039;:
				a[i]=&#039;,&#039;;
				break;

				case &#039;!&#039;:
				a[i]=&#039;;&#039;;
				break;

				case &#039;.&#039;:
				a[i]=&#039;:&#039;;
				break;

				case &#039;#&#039;:
				a[i]=&#039;!&#039;;
				break;

				case &#039;[&#039;:
				a[i]=&#039;%&#039;;
				break;

				case &#039;=&#039;:
				a[i]=&#039;?&#039;;
				break;

				case &#039;M&#039;:
				a[i]=&#039;~&#039;;
				break;

				case &#039;%&#039;:
				a[i]=&#039;.&#039;;
				break;

				case &#039;W&#039;:
				a[i]=&#039;/&#039;;
				break;

				case &#039;p&#039;:
				a[i]=&#039;&lt;&#039;;
				break;

				case &#039;~&#039;:
				a[i]=&#039;&gt;&#039;;
				break;

				case &#039;\n&#039;:
				break;

				default:
				std::cout&lt;&lt;&quot;Attention: un caractère n&#039;a pas été reconnu... Abandon.\n&quot;;
				break;
			}
    		}
	}
        else if(a[0]==&#039;1&#039; || a[0]==&#039;L&#039;)
	{
			for(unsigned int i=1; i&lt;a.size()-1;i++)
			{
				switch(a[i])
				{
					case &#039;7&#039;:
					a[i]=&#039;a&#039;;
					break;

					case &#039;N&#039;:
					a[i]=&#039;b&#039;;
					break;

					case &#039;9&#039;:
					a[i]=&#039;c&#039;;
					break;

					case &#039;]&#039;:
					a[i]=&#039;d&#039;;
					break;

					case &#039;a&#039;:
					a[i]=&#039;e&#039;;
					break;

					case &#039;:&#039;:
					a[i]=&#039;f&#039;;
					break;

					case &#039;?&#039;:
					a[i]=&#039;g&#039;;
					break;

					case &#039;2&#039;:
					a[i]=&#039;h&#039;;
					break;

					case &#039;c&#039;:
					a[i]=&#039;i&#039;;
					break;

					case &#039;b&#039;:
					a[i]=&#039;j&#039;;
					break;

					case &#039;|&#039;:
					a[i]=&#039;k&#039;;
					break;

					case &#039;B&#039;:
					a[i]=&#039;l&#039;;
					break;

					case &#039;l&#039;:
					a[i]=&#039;m&#039;;
					break;

					case &#039;_&#039;:
					a[i]=&#039;n&#039;;
					break;

					case &#039;U&#039;:
					a[i]=&#039;o&#039;;
					break;

					case &#039;3&#039;:
					a[i]=&#039;p&#039;;
					break;

					case &#039;R&#039;:
					a[i]=&#039;q&#039;;
					break;

					case &#039;~&#039;:
					a[i]=&#039;r&#039;;
					break;

					case &#039;V&#039;:
					a[i]=&#039;s&#039;;
					break;

					case &#039;e&#039;:
					a[i]=&#039;t&#039;;
					break;

					case &#039;n&#039;:
					a[i]=&#039;u&#039;;
					break;

					case &#039;=&#039;:
					a[i]=&#039;v&#039;;
					break;

					case &#039;(&#039;:
					a[i]=&#039;w&#039;;
					break;

					case &#039;W&#039;:
					a[i]=&#039;x&#039;;
					break;

					case &#039;G&#039;:
					a[i]=&#039;y&#039;;
					break;

					case &#039;)&#039;:
					a[i]=&#039;z&#039;;
					break;

					case &#039; &#039;:
					a[i]=&#039; &#039;;
					break;

					case &#039;x&#039;:
					a[i]=&#039;0&#039;;
					break;

					case &#039;&lt;&#039;:
					a[i]=&#039;1&#039;;
					break;

					case &#039;t&#039;:
					a[i]=&#039;2&#039;;
					break;

					case &#039;g&#039;:
					a[i]=&#039;3&#039;;
					break;

					case &#039;Z&#039;:
					a[i]=&#039;4&#039;;
					break;

					case &#039;/&#039;:
					a[i]=&#039;5&#039;;
					break;

					case &#039;d&#039;:
					a[i]=&#039;6&#039;;
					break;

					case &#039;&amp;&#039;:
					a[i]=&#039;7&#039;;
					break;

					case &#039;O&#039;:
					a[i]=&#039;8&#039;;
					break;

					case &#039;y&#039;:
					a[i]=&#039;9&#039;;
					break;

					case &#039;C&#039;:
					a[i]=&#039;A&#039;;
					break;

					case &#039;s&#039;:
					a[i]=&#039;B&#039;;
					break;

					case &#039;A&#039;:
					a[i]=&#039;C&#039;;
					break;

					case &#039;1&#039;:
					a[i]=&#039;D&#039;;
					break;

					case &#039;u&#039;:
					a[i]=&#039;E&#039;;
					break;

					case &#039;i&#039;:
					a[i]=&#039;F&#039;;
					break;

					case &#039;}&#039;:
					a[i]=&#039;G&#039;;
					break;

					case &#039;6&#039;:
					a[i]=&#039;H&#039;;
					break;

					case &#039;{&#039;:
					a[i]=&#039;I&#039;;
					break;

					case &#039;\&#039;&#039;:
					a[i]=&#039;J&#039;;
					break;

					case &#039;4&#039;:
					a[i]=&#039;K&#039;;
					break;

					case &#039;S&#039;:
					a[i]=&#039;L&#039;;
					break;

					case &#039;@&#039;:
					a[i]=&#039;M&#039;;
					break;

					case &#039;F&#039;:
					a[i]=&#039;N&#039;;
					break;

					case &#039;v&#039;:
					a[i]=&#039;O&#039;;
					break;

					case &#039;r&#039;:
					a[i]=&#039;P&#039;;
					break;

					case &#039;K&#039;:
					a[i]=&#039;Q&#039;;
					break;

					case &#039;z&#039;:
					a[i]=&#039;R&#039;;
					break;

					case &#039;5&#039;:
					a[i]=&#039;S&#039;;
					break;

					case &#039;+&#039;:
					a[i]=&#039;T&#039;;
					break;

					case &#039;Q&#039;:
					a[i]=&#039;U&#039;;
					break;

					case &#039;p&#039;:
					a[i]=&#039;V&#039;;
					break;

					case &#039;E&#039;:
					a[i]=&#039;W&#039;;
					break;

					case &#039;#&#039;:
					a[i]=&#039;X&#039;;
					break;

					case &#039;L&#039;:
					a[i]=&#039;Y&#039;;
					break;

					case &#039;f&#039;:
					a[i]=&#039;Z&#039;;
					break;

					case &#039;Y&#039;:
					a[i]=&#039;&amp;&#039;;
					break;

					case &#039;0&#039;:
					a[i]=&#039;&quot;&#039;;
					break;

					case &#039;.&#039;:
					a[i]=&#039;\&#039;&#039;;
					break;

					case &#039;I&#039;:
					a[i]=&#039;(&#039;;
					break;

					case &#039;w&#039;:
					a[i]=&#039;-&#039;;
					break;

					case &#039;o&#039;:
					a[i]=&#039;_&#039;;
					break;

					case &#039;H&#039;:
					a[i]=&#039;)&#039;;
					break;

					case &#039;%&#039;:
					a[i]=&#039;=&#039;;
					break;

					case &#039;q&#039;:
					a[i]=&#039;+&#039;;
					break;

					case &#039;[&#039;:
					a[i]=&#039;#&#039;;
					break;

					case &#039;h&#039;:
					a[i]=&#039;{&#039;;
					break;

					case &#039;!&#039;:
					a[i]=&#039;[&#039;;
					break;

					case &#039;-&#039;:
					a[i]=&#039;|&#039;;
					break;

					case &#039;J&#039;:
					a[i]=&#039;\\&#039;;
					break;

					case &#039;T&#039;:
					a[i]=&#039;@&#039;;
					break;

					case &#039;k&#039;:
					a[i]=&#039;]&#039;;
					break;

					case &#039;8&#039;:
					a[i]=&#039;}&#039;;
					break;

					case &#039;$&#039;:
					a[i]=&#039;$&#039;;
					break;

					case &#039;;&#039;:
					a[i]=&#039;,&#039;;
					break;

					case &#039;D&#039;:
					a[i]=&#039;;&#039;;
					break;

					case &#039;&gt;&#039;:
					a[i]=&#039;:&#039;;
					break;

					case &#039;m&#039;:
					a[i]=&#039;!&#039;;
					break;

					case &#039;\\&#039;:
					a[i]=&#039;%&#039;;
					break;

					case &#039;j&#039;:
					a[i]=&#039;?&#039;;
					break;

					case &#039;P&#039;:
					a[i]=&#039;~&#039;;
					break;

					case &#039;&quot;&#039;:
					a[i]=&#039;.&#039;;
					break;

					case &#039;X&#039;:
					a[i]=&#039;/&#039;;
					break;

					case &#039;M&#039;:
					a[i]=&#039;&lt;&#039;;
					break;

					case &#039;,&#039;:
					a[i]=&#039;&gt;&#039;;
					break;

					case &#039;\n&#039;:
					break;

					default:
					std::cout&lt;&lt;&quot;Attention: un caractère n&#039;a pas été reconnu... Abandon.\n&quot;;
					break;
			}
		}
	}
	else if(a[0]==&#039;2&#039; || a[0]==&#039;j&#039;)
	{
			for(unsigned int i=1; i&lt;a.size()-1;i++)
			{
				switch(a[i])
				{
					case &#039;v&#039;:
					a[i]=&#039;a&#039;;
					break;

					case &#039;5&#039;:
					a[i]=&#039;b&#039;;
					break;

					case &#039;z&#039;:
					a[i]=&#039;c&#039;;
					break;

					case &#039;a&#039;:
					a[i]=&#039;d&#039;;
					break;

					case &#039;3&#039;:
					a[i]=&#039;e&#039;;
					break;

					case &#039;C&#039;:
					a[i]=&#039;f&#039;;
					break;

					case &#039;D&#039;:
					a[i]=&#039;g&#039;;
					break;

					case &#039;R&#039;:
					a[i]=&#039;h&#039;;
					break;

					case &#039;N&#039;:
					a[i]=&#039;i&#039;;
					break;

					case &#039;Q&#039;:
					a[i]=&#039;j&#039;;
					break;

					case &#039;T&#039;:
					a[i]=&#039;k&#039;;
					break;

					case &#039;e&#039;:
					a[i]=&#039;l&#039;;
					break;

					case &#039;/&#039;:
					a[i]=&#039;m&#039;;
					break;

					case &#039;Y&#039;:
					a[i]=&#039;n&#039;;
					break;

					case &#039;$&#039;:
					a[i]=&#039;o&#039;;
					break;

					case &#039;d&#039;:
					a[i]=&#039;p&#039;;
					break;

					case &#039;P&#039;:
					a[i]=&#039;q&#039;;
					break;

					case &#039;I&#039;:
					a[i]=&#039;r&#039;;
					break;

					case &#039;A&#039;:
					a[i]=&#039;s&#039;;
					break;

					case &#039;f&#039;:
					a[i]=&#039;t&#039;;
					break;

					case &#039;&gt;&#039;:
					a[i]=&#039;u&#039;;
					break;

					case &#039;;&#039;:
					a[i]=&#039;v&#039;;
					break;

					case &#039;X&#039;:
					a[i]=&#039;w&#039;;
					break;

					case &#039;u&#039;:
					a[i]=&#039;x&#039;;
					break;

					case &#039;2&#039;:
					a[i]=&#039;y&#039;;
					break;

					case &#039;}&#039;:
					a[i]=&#039;z&#039;;
					break;

					case &#039;=&#039;:
					a[i]=&#039; &#039;;
					break;

					case &#039;n&#039;:
					a[i]=&#039;0&#039;;
					break;

					case &#039;]&#039;:
					a[i]=&#039;1&#039;;
					break;

					case &#039;#&#039;:
					a[i]=&#039;2&#039;;
					break;

					case &#039;M&#039;:
					a[i]=&#039;3&#039;;
					break;

					case &#039;{&#039;:
					a[i]=&#039;4&#039;;
					break;

					case &#039;8&#039;:
					a[i]=&#039;5&#039;;
					break;

					case &#039;9&#039;:
					a[i]=&#039;6&#039;;
					break;

					case &#039;k&#039;:
					a[i]=&#039;7&#039;;
					break;

					case &#039;.&#039;:
					a[i]=&#039;8&#039;;
					break;

					case &#039;&amp;&#039;:
					a[i]=&#039;9&#039;;
					break;

					case &#039;b&#039;:
					a[i]=&#039;A&#039;;
					break;

					case &#039;Z&#039;:
					a[i]=&#039;B&#039;;
					break;

					case &#039;:&#039;:
					a[i]=&#039;C&#039;;
					break;

					case &#039;~&#039;:
					a[i]=&#039;D&#039;;
					break;

					case &#039;!&#039;:
					a[i]=&#039;E&#039;;
					break;

					case &#039;)&#039;:
					a[i]=&#039;F&#039;;
					break;

					case &#039;V&#039;:
					a[i]=&#039;G&#039;;
					break;

					case &#039;+&#039;:
					a[i]=&#039;H&#039;;
					break;

					case &#039;O&#039;:
					a[i]=&#039;I&#039;;
					break;

					case &#039;p&#039;:
					a[i]=&#039;J&#039;;
					break;

					case &#039;W&#039;:
					a[i]=&#039;K&#039;;
					break;

					case &#039;y&#039;:
					a[i]=&#039;L&#039;;
					break;

					case &#039;m&#039;:
					a[i]=&#039;M&#039;;
					break;

					case &#039;h&#039;:
					a[i]=&#039;N&#039;;
					break;

					case &#039;-&#039;:
					a[i]=&#039;O&#039;;
					break;

					case &#039;t&#039;:
					a[i]=&#039;P&#039;;
					break;

					case &#039;s&#039;:
					a[i]=&#039;Q&#039;;
					break;

					case &#039;&quot;&#039;:
					a[i]=&#039;R&#039;;
					break;

					case &#039;w&#039;:
					a[i]=&#039;S&#039;;
					break;

					case &#039;B&#039;:
					a[i]=&#039;T&#039;;
					break;

					case &#039;J&#039;:
					a[i]=&#039;U&#039;;
					break;

					case &#039;[&#039;:
					a[i]=&#039;V&#039;;
					break;

					case &#039;_&#039;:
					a[i]=&#039;W&#039;;
					break;

					case &#039;K&#039;:
					a[i]=&#039;X&#039;;
					break;

					case &#039;q&#039;:
					a[i]=&#039;Y&#039;;
					break;

					case &#039;6&#039;:
					a[i]=&#039;Z&#039;;
					break;

					case &#039;r&#039;:
					a[i]=&#039;&amp;&#039;;
					break;

					case &#039;,&#039;:
					a[i]=&#039;&quot;&#039;;
					break;

					case &#039;E&#039;:
					a[i]=&#039;\&#039;&#039;;
					break;

					case &#039;G&#039;:
					a[i]=&#039;(&#039;;
					break;

					case &#039;0&#039;:
					a[i]=&#039;-&#039;;
					break;

					case &#039;1&#039;:
					a[i]=&#039;_&#039;;
					break;

					case &#039;F&#039;:
					a[i]=&#039;)&#039;;
					break;

					case &#039;L&#039;:
					a[i]=&#039;=&#039;;
					break;

					case &#039;@&#039;:
					a[i]=&#039;+&#039;;
					break;

					case &#039;c&#039;:
					a[i]=&#039;#&#039;;
					break;

					case &#039;\&#039;&#039;:
					a[i]=&#039;{&#039;;
					break;

					case &#039;o&#039;:
					a[i]=&#039;[&#039;;
					break;

					case &#039;U&#039;:
					a[i]=&#039;|&#039;;
					break;

					case &#039;x&#039;:
					a[i]=&#039;\\&#039;;
					break;

					case &#039;|&#039;:
					a[i]=&#039;@&#039;;
					break;

					case &#039;7&#039;:
					a[i]=&#039;]&#039;;
					break;

					case &#039;&lt;&#039;:
					a[i]=&#039;}&#039;;
					break;

					case &#039;S&#039;:
					a[i]=&#039;$&#039;;
					break;

					case &#039;g&#039;:
					a[i]=&#039;,&#039;;
					break;

					case &#039;4&#039;:
					a[i]=&#039;;&#039;;
					break;

					case &#039; &#039;:
					a[i]=&#039;:&#039;;
					break;

					case &#039;H&#039;:
					a[i]=&#039;!&#039;;
					break;

					case &#039;i&#039;:
					a[i]=&#039;%&#039;;
					break;

					case &#039;j&#039;:
					a[i]=&#039;?&#039;;
					break;

					case &#039;%&#039;:
					a[i]=&#039;~&#039;;
					break;

					case &#039;(&#039;:
					a[i]=&#039;.&#039;;
					break;

					case &#039;l&#039;:
					a[i]=&#039;/&#039;;
					break;

					case &#039;\\&#039;:
					a[i]=&#039;&lt;&#039;;
					break;

					case &#039;?&#039;:
					a[i]=&#039;&gt;&#039;;
					break;

					case &#039;\n&#039;:
					break;

					default:
					std::cout&lt;&lt;&quot;Attention: un caractère n&#039;a pas été reconnu... Abandon.\n&quot;;
					break;
				}
			}
		}
		else if(a[0]==&#039;3&#039; || a[0]==&#039;!&#039;)
		{
			for(unsigned int i=1; i&lt;a.size()-1;i++)
			{
				switch(a[i])
				{
					case &#039;d&#039;:
					a[i]=&#039;a&#039;;
					break;

					case &#039;N&#039;:
					a[i]=&#039;b&#039;;
					break;

					case &#039;v&#039;:
					a[i]=&#039;c&#039;;
					break;

					case &#039;9&#039;:
					a[i]=&#039;d&#039;;
					break;

					case &#039;H&#039;:
					a[i]=&#039;e&#039;;
					break;

					case &#039;g&#039;:
					a[i]=&#039;f&#039;;
					break;

					case &#039;:&#039;:
					a[i]=&#039;g&#039;;
					break;

					case &#039;w&#039;:
					a[i]=&#039;h&#039;;
					break;

					case &#039;X&#039;:
					a[i]=&#039;i&#039;;
					break;

					case &#039;G&#039;:
					a[i]=&#039;j&#039;;
					break;

					case &#039;J&#039;:
					a[i]=&#039;k&#039;;
					break;

					case &#039;T&#039;:
					a[i]=&#039;l&#039;;
					break;

					case &#039;7&#039;:
					a[i]=&#039;m&#039;;
					break;

					case &#039;a&#039;:
					a[i]=&#039;n&#039;;
					break;

					case &#039;\\&#039;:
					a[i]=&#039;o&#039;;
					break;

					case &#039;V&#039;:
					a[i]=&#039;p&#039;;
					break;

					case &#039;E&#039;:
					a[i]=&#039;q&#039;;
					break;

					case &#039;+&#039;:
					a[i]=&#039;r&#039;;
					break;

					case &#039;A&#039;:
					a[i]=&#039;s&#039;;
					break;

					case &#039;p&#039;:
					a[i]=&#039;t&#039;;
					break;

					case &#039;)&#039;:
					a[i]=&#039;u&#039;;
					break;

					case &#039;q&#039;:
					a[i]=&#039;v&#039;;
					break;

					case &#039; &#039;:
					a[i]=&#039;w&#039;;
					break;

					case &#039;Q&#039;:
					a[i]=&#039;x&#039;;
					break;

					case &#039;y&#039;:
					a[i]=&#039;y&#039;;
					break;

					case &#039;Y&#039;:
					a[i]=&#039;z&#039;;
					break;

					case &#039;c&#039;:
					a[i]=&#039; &#039;;
					break;

					case &#039;u&#039;:
					a[i]=&#039;0&#039;;
					break;

					case &#039;O&#039;:
					a[i]=&#039;1&#039;;
					break;

					case &#039;4&#039;:
					a[i]=&#039;2&#039;;
					break;

					case &#039;F&#039;:
					a[i]=&#039;3&#039;;
					break;

					case &#039;~&#039;:
					a[i]=&#039;4&#039;;
					break;

					case &#039;2&#039;:
					a[i]=&#039;5&#039;;
					break;

					case &#039;[&#039;:
					a[i]=&#039;6&#039;;
					break;

					case &#039;h&#039;:
					a[i]=&#039;7&#039;;
					break;

					case &#039;.&#039;:
					a[i]=&#039;8&#039;;
					break;

					case &#039;0&#039;:
					a[i]=&#039;9&#039;;
					break;

					case &#039;W&#039;:
					a[i]=&#039;A&#039;;
					break;

					case &#039;D&#039;:
					a[i]=&#039;B&#039;;
					break;

					case &#039;P&#039;:
					a[i]=&#039;C&#039;;
					break;

					case &#039;\&#039;&#039;:
					a[i]=&#039;D&#039;;
					break;

					case &#039;f&#039;:
					a[i]=&#039;E&#039;;
					break;

					case &#039;1&#039;:
					a[i]=&#039;F&#039;;
					break;

					case &#039;t&#039;:
					a[i]=&#039;G&#039;;
					break;

					case &#039;x&#039;:
					a[i]=&#039;H&#039;;
					break;

					case &#039;%&#039;:
					a[i]=&#039;I&#039;;
					break;

					case &#039;&gt;&#039;:
					a[i]=&#039;J&#039;;
					break;

					case &#039;Z&#039;:
					a[i]=&#039;K&#039;;
					break;

					case &#039;K&#039;:
					a[i]=&#039;L&#039;;
					break;

					case &#039;{&#039;:
					a[i]=&#039;M&#039;;
					break;

					case &#039;_&#039;:
					a[i]=&#039;N&#039;;
					break;

					case &#039;]&#039;:
					a[i]=&#039;O&#039;;
					break;

					case &#039;r&#039;:
					a[i]=&#039;P&#039;;
					break;

					case &#039;U&#039;:
					a[i]=&#039;Q&#039;;
					break;

					case &#039;?&#039;:
					a[i]=&#039;R&#039;;
					break;

					case &#039;&amp;&#039;:
					a[i]=&#039;S&#039;;
					break;

					case &#039;k&#039;:
					a[i]=&#039;T&#039;;
					break;

					case &#039;#&#039;:
					a[i]=&#039;U&#039;;
					break;

					case &#039;!&#039;:
					a[i]=&#039;V&#039;;
					break;

					case &#039;8&#039;:
					a[i]=&#039;W&#039;;
					break;

					case &#039;B&#039;:
					a[i]=&#039;X&#039;;
					break;

					case &#039;I&#039;:
					a[i]=&#039;Y&#039;;
					break;

					case &#039;R&#039;:
					a[i]=&#039;Z&#039;;
					break;

					case &#039;}&#039;:
					a[i]=&#039;&amp;&#039;;
					break;

					case &#039;3&#039;:
					a[i]=&#039;&quot;&#039;;
					break;

					case &#039;M&#039;:
					a[i]=&#039;\&#039;&#039;;
					break;

					case &#039;i&#039;:
					a[i]=&#039;(&#039;;
					break;

					case &#039;e&#039;:
					a[i]=&#039;-&#039;;
					break;

					case &#039;m&#039;:
					a[i]=&#039;_&#039;;
					break;

					case &#039;-&#039;:
					a[i]=&#039;)&#039;;
					break;

					case &#039;=&#039;:
					a[i]=&#039;=&#039;;
					break;

					case &#039;&quot;&#039;:
					a[i]=&#039;+&#039;;
					break;

					case &#039;S&#039;:
					a[i]=&#039;#&#039;;
					break;

					case &#039;@&#039;:
					a[i]=&#039;{&#039;;
					break;

					case &#039;/&#039;:
					a[i]=&#039;[&#039;;
					break;

					case &#039;n&#039;:
					a[i]=&#039;|&#039;;
					break;

					case &#039;6&#039;:
					a[i]=&#039;\\&#039;;
					break;

					case &#039;5&#039;:
					a[i]=&#039;@&#039;;
					break;

					case &#039;;&#039;:
					a[i]=&#039;]&#039;;
					break;

					case &#039;b&#039;:
					a[i]=&#039;}&#039;;
					break;

					case &#039;l&#039;:
					a[i]=&#039;$&#039;;
					break;

					case &#039;,&#039;:
					a[i]=&#039;,&#039;;
					break;

					case &#039;j&#039;:
					a[i]=&#039;;&#039;;
					break;

					case &#039;$&#039;:
					a[i]=&#039;:&#039;;
					break;

					case &#039;|&#039;:
					a[i]=&#039;!&#039;;
					break;

					case &#039;C&#039;:
					a[i]=&#039;%&#039;;
					break;

					case &#039;(&#039;:
					a[i]=&#039;?&#039;;
					break;

					case &#039;z&#039;:
					a[i]=&#039;~&#039;;
					break;

					case &#039;&lt;&#039;:
					a[i]=&#039;.&#039;;
					break;

					case &#039;L&#039;:
					a[i]=&#039;/&#039;;
					break;

					case &#039;s&#039;:
					a[i]=&#039;&lt;&#039;;
					break;

					case &#039;o&#039;:
					a[i]=&#039;&gt;&#039;;
					break;

					case &#039;\n&#039;:
					break;

					default:
					std::cout&lt;&lt;&quot;Attention: un caractère n&#039;a pas été reconnu... Abandon.\n&quot;;
					break;
				}
			}
		}
		else if(a[0]==&#039;4&#039; || a[0]==&#039;b&#039;)
		{
			for(unsigned int i=1; i&lt;a.size()-1;i++)
			{
				switch(a[i])
				{
					case &#039;B&#039;:
					a[i]=&#039;a&#039;;
					break;

					case &#039;k&#039;:
					a[i]=&#039;b&#039;;
					break;

					case &#039;Y&#039;:
					a[i]=&#039;c&#039;;
					break;

					case &#039;]&#039;:
					a[i]=&#039;d&#039;;
					break;

					case &#039;b&#039;:
					a[i]=&#039;e&#039;;
					break;

					case &#039;V&#039;:
					a[i]=&#039;f&#039;;
					break;

					case &#039;&lt;&#039;:
					a[i]=&#039;g&#039;;
					break;

					case &#039;~&#039;:
					a[i]=&#039;h&#039;;
					break;

					case &#039;l&#039;:
					a[i]=&#039;i&#039;;
					break;

					case &#039;)&#039;:
					a[i]=&#039;j&#039;;
					break;

					case &#039;x&#039;:
					a[i]=&#039;k&#039;;
					break;

					case &#039;\&#039;&#039;:
					a[i]=&#039;l&#039;;
					break;

					case &#039;Z&#039;:
					a[i]=&#039;m&#039;;
					break;

					case &#039;O&#039;:
					a[i]=&#039;n&#039;;
					break;

					case &#039;W&#039;:
					a[i]=&#039;o&#039;;
					break;

					case &#039; &#039;:
					a[i]=&#039;p&#039;;
					break;

					case &#039;f&#039;:
					a[i]=&#039;q&#039;;
					break;

					case &#039;,&#039;:
					a[i]=&#039;r&#039;;
					break;

					case &#039;H&#039;:
					a[i]=&#039;s&#039;;
					break;

					case &#039;g&#039;:
					a[i]=&#039;t&#039;;
					break;

					case &#039;m&#039;:
					a[i]=&#039;u&#039;;
					break;

					case &#039;L&#039;:
					a[i]=&#039;v&#039;;
					break;

					case &#039;{&#039;:
					a[i]=&#039;w&#039;;
					break;

					case &#039;Q&#039;:
					a[i]=&#039;x&#039;;
					break;

					case &#039;1&#039;:
					a[i]=&#039;y&#039;;
					break;

					case &#039;o&#039;:
					a[i]=&#039;z&#039;;
					break;

					case &#039;_&#039;:
					a[i]=&#039; &#039;;
					break;

					case &#039;P&#039;:
					a[i]=&#039;0&#039;;
					break;

					case &#039;w&#039;:
					a[i]=&#039;1&#039;;
					break;

					case &#039;-&#039;:
					a[i]=&#039;2&#039;;
					break;

					case &#039;4&#039;:
					a[i]=&#039;3&#039;;
					break;

					case &#039;d&#039;:
					a[i]=&#039;4&#039;;
					break;

					case &#039;R&#039;:
					a[i]=&#039;5&#039;;
					break;

					case &#039;=&#039;:
					a[i]=&#039;6&#039;;
					break;

					case &#039;M&#039;:
					a[i]=&#039;7&#039;;
					break;

					case &#039;$&#039;:
					a[i]=&#039;8&#039;;
					break;

					case &#039;F&#039;:
					a[i]=&#039;9&#039;;
					break;

					case &#039;t&#039;:
					a[i]=&#039;A&#039;;
					break;

					case &#039;6&#039;:
					a[i]=&#039;B&#039;;
					break;

					case &#039;0&#039;:
					a[i]=&#039;C&#039;;
					break;

					case &#039;U&#039;:
					a[i]=&#039;D&#039;;
					break;

					case &#039;9&#039;:
					a[i]=&#039;E&#039;;
					break;

					case &#039;c&#039;:
					a[i]=&#039;F&#039;;
					break;

					case &#039;T&#039;:
					a[i]=&#039;G&#039;;
					break;

					case &#039;%&#039;:
					a[i]=&#039;H&#039;;
					break;

					case &#039;5&#039;:
					a[i]=&#039;I&#039;;
					break;

					case &#039;.&#039;:
					a[i]=&#039;J&#039;;
					break;

					case &#039;(&#039;:
					a[i]=&#039;K&#039;;
					break;

					case &#039;?&#039;:
					a[i]=&#039;L&#039;;
					break;

					case &#039;E&#039;:
					a[i]=&#039;M&#039;;
					break;

					case &#039;&quot;&#039;:
					a[i]=&#039;N&#039;;
					break;

					case &#039;}&#039;:
					a[i]=&#039;O&#039;;
					break;

					case &#039;8&#039;:
					a[i]=&#039;P&#039;;
					break;

					case &#039;I&#039;:
					a[i]=&#039;Q&#039;;
					break;

					case &#039;!&#039;:
					a[i]=&#039;R&#039;;
					break;

					case &#039;p&#039;:
					a[i]=&#039;S&#039;;
					break;

					case &#039;#&#039;:
					a[i]=&#039;T&#039;;
					break;

					case &#039;2&#039;:
					a[i]=&#039;U&#039;;
					break;

					case &#039;+&#039;:
					a[i]=&#039;V&#039;;
					break;

					case &#039;A&#039;:
					a[i]=&#039;W&#039;;
					break;

					case &#039;n&#039;:
					a[i]=&#039;X&#039;;
					break;

					case &#039;z&#039;:
					a[i]=&#039;Y&#039;;
					break;

					case &#039;[&#039;:
					a[i]=&#039;Z&#039;;
					break;

					case &#039;S&#039;:
					a[i]=&#039;&amp;&#039;;
					break;

					case &#039;D&#039;:
					a[i]=&#039;&quot;&#039;;
					break;

					case &#039;u&#039;:
					a[i]=&#039;\&#039;&#039;;
					break;

					case &#039;\\&#039;:
					a[i]=&#039;(&#039;;
					break;

					case &#039;@&#039;:
					a[i]=&#039;-&#039;;
					break;

					case &#039;G&#039;:
					a[i]=&#039;_&#039;;
					break;

					case &#039;i&#039;:
					a[i]=&#039;)&#039;;
					break;

					case &#039;3&#039;:
					a[i]=&#039;=&#039;;
					break;

					case &#039;C&#039;:
					a[i]=&#039;+&#039;;
					break;

					case &#039;;&#039;:
					a[i]=&#039;#&#039;;
					break;

					case &#039;7&#039;:
					a[i]=&#039;{&#039;;
					break;

					case &#039;X&#039;:
					a[i]=&#039;[&#039;;
					break;

					case &#039;r&#039;:
					a[i]=&#039;|&#039;;
					break;

					case &#039;h&#039;:
					a[i]=&#039;\\&#039;;
					break;

					case &#039;N&#039;:
					a[i]=&#039;@&#039;;
					break;

					case &#039;K&#039;:
					a[i]=&#039;]&#039;;
					break;

					case &#039;&amp;&#039;:
					a[i]=&#039;}&#039;;
					break;

					case &#039;s&#039;:
					a[i]=&#039;$&#039;;
					break;

					case &#039;&gt;&#039;:
					a[i]=&#039;,&#039;;
					break;

					case &#039;:&#039;:
					a[i]=&#039;;&#039;;
					break;

					case &#039;J&#039;:
					a[i]=&#039;:&#039;;
					break;

					case &#039;|&#039;:
					a[i]=&#039;!&#039;;
					break;

					case &#039;a&#039;:
					a[i]=&#039;%&#039;;
					break;

					case &#039;y&#039;:
					a[i]=&#039;?&#039;;
					break;

					case &#039;v&#039;:
					a[i]=&#039;~&#039;;
					break;

					case &#039;e&#039;:
					a[i]=&#039;.&#039;;
					break;

					case &#039;/&#039;:
					a[i]=&#039;/&#039;;
					break;

					case &#039;q&#039;:
					a[i]=&#039;&lt;&#039;;
					break;

					case &#039;j&#039;:
					a[i]=&#039;&gt;&#039;;
					break;

					case &#039;\n&#039;:
					break;

					default:
					std::cout&lt;&lt;&quot;Attention: un caractère n&#039;a pas été reconnu... Abandon.\n&quot;;
					break;
				}
			}
		}
		else
		{
			std::cout&lt;&lt;&quot;Erreur: encodage non reconnu.\n&quot;;
		}
}</code></pre></div><div class="codebox"><pre><code>//header.h

#ifndef header
#define header

#include&lt;iostream&gt;
#include&lt;string&gt;
#include&lt;limits&gt;
#include&lt;sstream&gt;
#include&lt;ctime&gt;
#include&lt;cstdlib&gt;
#include&lt;fstream&gt;
#include&lt;cctype&gt;

#include&quot;action.h&quot;
#include&quot;codage.h&quot;

#endif</code></pre></div><div class="codebox"><pre><code>//header.cpp

#include&quot;header.h&quot;</code></pre></div><br /><br /><br /><br /><p>Sources de Encryptor:</p><div class="codebox"><pre class="vscroll"><code>//mains.cpp

#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;fstream&gt;
#include &quot;fonctions.h&quot;
#include &quot;menus.h&quot;
#include &quot;cryptage.h&quot;


int main()
{
    //Declaration des variables
    bool quit = 0; // Variable de la Boucle Principale
    char menu = &#039;0&#039;; // Choix de l&#039;utilisateur dans le switch

    clrscreen();
    //Boucle principale
    while(quit != 1)
    {
        //Menu Principal
        std::cout &lt;&lt; &quot;Menu Principal\n&quot;;
        std::cout &lt;&lt; &quot;===============\n\n&quot;;
        std::cout &lt;&lt; &quot;1. Cryptage\n\n&quot;;
        std::cout &lt;&lt; &quot;2. A propos\n&quot;;
        std::cout &lt;&lt; &quot;3. Quitter\n&quot;;
        std::cout &lt;&lt; &quot;===============\n&quot;;
        std::cout &lt;&lt; &quot;Choix ? &quot;;
        std::cin &gt;&gt; menu; // l&#039;utilisateur entre le menu qu&#039;il souhaite ouvrir

        //Redirection de l&#039;utilisateur selon son choix grâce à un switch.
        switch(menu)
        {
            case &#039;1&#039;:
                clrscreen();
                menuCryptage(); //On ouvre le menu de cryptage/decryptage
                break;
            case &#039;2&#039;:
                clrscreen();
                menuAbout();    //on ouvre le menu &quot;A propos&quot;
                break;
            case &#039;3&#039;:
                clrscreen();
                menuVerify(quit);   //on demande une confirmation avant de quitter
                break;
            default:
                clrscreen();
                std::cout &lt;&lt; &quot;/!\\ Entree Invalide /!\\\n\n&quot;;
                break;
        }

    }
    return 0;
}</code></pre></div><div class="codebox"><pre><code>//menus.h

#ifndef MENUS_H_INCLUDED
#define MENUS_H_INCLUDED

void menuCrypter();
void menuDecrypter();
void menuCryptage();
void menuOptions();
bool menuVerify(bool &amp;quit);
void menuAbout();
void menuChoixHashage();

#endif // MENUS_H_INCLUDED</code></pre></div><div class="codebox"><pre class="vscroll"><code>//menus.cpp

#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;fstream&gt;
#include &lt;limits&gt;
#include &quot;fonctions.h&quot;
#include &quot;menus.h&quot;
#include &quot;cryptage.h&quot;


void menuCryptage()
{
    //Declaration des variables
    bool retour = 0; // Variable de la Boucle Principale
    char menu = &#039;0&#039;; // Choix de l&#039;utilisateur dans le switch

    //avant d&#039;entrer dans le menu on flushe l&#039;ecran
    clrscreen();
    //Boucle principale
    while(retour != 1)
    {
        //Menu Principal
        std::cout &lt;&lt; &quot;Menu Cryptage\n&quot;;
        std::cout &lt;&lt; &quot;===============\n\n&quot;;
        std::cout &lt;&lt; &quot;1. Crypter\n&quot;;
        std::cout &lt;&lt; &quot;2. Decrypter\n\n&quot;;
        std::cout &lt;&lt; &quot;3. Retour\n&quot;;
        std::cout &lt;&lt; &quot;===============\n&quot;;
        std::cout &lt;&lt; &quot;Choix ? &quot;;
        std::cin &gt;&gt; menu; // l&#039;utilisateur entre le menu qu&#039;il souhaite ouvrir

        //Redirection de l&#039;utilisateur selon son choix grâce à un switch.
        switch(menu)
        {
            case &#039;1&#039;:
                clrscreen();
                menuCrypter();
                break;
            case &#039;2&#039;:
                clrscreen();
                menuDecrypter();

                break;
            case &#039;3&#039;:
                clrscreen();
                retour = 1;
                break;
            default:
                clrscreen();
                std::cout &lt;&lt; &quot;/!\\ Entree Invalide /!\\\n\n&quot;;
                break;
        }

    }
}

void menuCrypter()
{
        //Declaration des variables
    bool retour = 0; // Variable de la Boucle Principale
    char menu = &#039;0&#039;; // Choix de l&#039;utilisateur dans le switch
    std::string path = &quot;na&quot;;

    //avant d&#039;entrer dans le menu on flushe l&#039;ecran
    clrscreen();
    //Boucle principale
    while(retour != 1)
    {
        //Menu Principal
        std::cout &lt;&lt; &quot;Crypter un Fichier\n&quot;;
        std::cout &lt;&lt; &quot;===============\n&quot;;
        std::cout &lt;&lt; &quot;1. Choix du Hashage [Actuel : &quot; &lt;&lt; currentHash() &lt;&lt; &quot;]\n\n&quot;;
        std::cout &lt;&lt; &quot;2. Creer un fichier crypte\n&quot;;
        std::cout &lt;&lt; &quot;3. Crypter un fichier\n\n&quot;;
        std::cout &lt;&lt; &quot;4. Retour\n&quot;;
        std::cout &lt;&lt; &quot;===============\n&quot;;
        std::cout &lt;&lt; &quot;Choix ? &quot;;
        std::cin &gt;&gt; menu; // l&#039;utilisateur entre le menu qu&#039;il souhaite ouvrir

        //Redirection de l&#039;utilisateur selon son choix grâce à un switch.
        switch(menu)
        {
        case &#039;1&#039;:
            clrscreen();
            menuChoixHashage();
            break;
        case &#039;2&#039;:
            clrscreen();
            path = createTxt();
            choixHashage(getHashNum(), path);
            break;
        case &#039;3&#039;:
            clrscreen();
            std::cout &lt;&lt; &quot;Cryptage d&#039;un fichier\n&quot;;
            std::cout &lt;&lt; &quot;===============\n\n&quot;;
            std::cout &lt;&lt; &quot;Entrez le chemin jusqu&#039;au fichier a crypter :\n&quot;;
            std::cout &lt;&lt; &quot;(ex: C:/Secret/fichier.txt)\n\n&quot;;
            std::cout &lt;&lt; &quot;-| &quot;;
            std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(),&#039;\n&#039;);
            std::getline(std::cin, path);
            choixHashage(getHashNum(), path);
            break;
        case &#039;4&#039;:
            clrscreen();
            retour = 1;
            break;
            default:
            clrscreen();
            std::cout &lt;&lt; &quot;/!\\ Entree Invalide /!\\\n\n&quot;;
            break;
        }

    }
}

void menuDecrypter()
{
        //Declaration des variables
    bool retour = 0; // Variable de la Boucle Principale
    char menu = &#039;0&#039;; // Choix de l&#039;utilisateur dans le switch
    std::string path = &quot;na&quot;;

    //avant d&#039;entrer dans le menu on flushe l&#039;ecran
    clrscreen();
    //Boucle principale
    while(retour != 1)
    {
        //Menu Principal
        std::cout &lt;&lt; &quot;Decrypter un Fichier\n&quot;;
        std::cout &lt;&lt; &quot;===============\n\n&quot;;
        std::cout &lt;&lt; &quot;1. Decrypter un fichier\n\n&quot;;
        std::cout &lt;&lt; &quot;2. Retour\n&quot;;
        std::cout &lt;&lt; &quot;===============\n&quot;;
        std::cout &lt;&lt; &quot;Choix ? &quot;;
        std::cin &gt;&gt; menu; // l&#039;utilisateur entre le menu qu&#039;il souhaite ouvrir

        //Redirection de l&#039;utilisateur selon son choix grâce à un switch.
        switch(menu)
        {
            case &#039;1&#039;:
                clrscreen();
                std::cout &lt;&lt; &quot;Decrypter un Fichier\n&quot;;
                std::cout &lt;&lt; &quot;===============\n\n&quot;;
                std::cout &lt;&lt; &quot;Entrez le chemin jusqu&#039;au fichier a decrypter :\n&quot;;
                std::cout &lt;&lt; &quot;(ex: C:/Secret/fichier.txt.cdx)\n\n&quot;;
                std::cout &lt;&lt; &quot;-| &quot;;
                std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(),&#039;\n&#039;);
                std::getline(std::cin, path);
                getDecryptHash(path);
                break;
            case &#039;2&#039;:
                clrscreen();
                retour = 1;
                break;
            default:
                clrscreen();
                std::cout &lt;&lt; &quot;/!\\ Entree Invalide /!\\\n\n&quot;;
                break;
        }

    }
}

void menuOptions()
{
    //Declaration des variables
    bool retour = 0; // Variable de la Boucle Principale
    char menu = &#039;0&#039;; // Choix de l&#039;utilisateur dans le switch

    //avant d&#039;entrer dans le menu on flush l&#039;ecran
    clrscreen();
    //Boucle principale
    while(retour != 1)
    {
        //Menu Principal
        std::cout &lt;&lt; &quot;Parametres\n&quot;;
        std::cout &lt;&lt; &quot;===============\n\n&quot;;
        std::cout &lt;&lt; &quot;1. Changer la Table de Hashage\n&quot;;
        std::cout &lt;&lt; &quot;2. Reinitialiser les reglages\n\n&quot;;
        std::cout &lt;&lt; &quot;3. Retour\n&quot;;
        std::cout &lt;&lt; &quot;===============\n&quot;;
        std::cout &lt;&lt; &quot;Choix ? &quot;;
        std::cin &gt;&gt; menu; // l&#039;utilisateur entre le menu qu&#039;il souhaite ouvrir

        //Redirection de l&#039;utilisateur selon son choix grâce à un switch, et on vérifie que menu ne contienne pas n&#039;importequoi
        switch(menu)
        {
        case &#039;1&#039;: //pour menu = 1
            clrscreen();
            menuChoixHashage();
            break;
        case &#039;2&#039;: // pour menu = 2
            clrscreen();
            setHashHSH();
            break;
        case &#039;3&#039;: // pour menu = 3
            clrscreen();
            retour = 1;
            break;
        default:
            clrscreen();
            std::cout &lt;&lt; &quot;/!\\ Entree Invalide /!\\\n\n&quot;;
            break;
        }


    }
}

void menuChoixHashage()
{
    //Declaration des variables
    bool retour = 0; // Variable de la Boucle Principale
    char menu = &#039;0&#039;; // Choix de l&#039;utilisateur dans le switch

    //avant d&#039;entrer dans le menu on flush l&#039;ecran
    clrscreen();
    //Boucle principale
    while(retour != 1)
    {
        //Menu Principal
        std::cout &lt;&lt; &quot;Choix de la table de hashage\n&quot;;
        std::cout &lt;&lt; &quot;===============\n&quot;;
        std::cout &lt;&lt; &quot;Table de Hashage Actuelle : [&quot; &lt;&lt; currentHash() &lt;&lt; &quot;]\n\n&quot;;
        std::cout &lt;&lt; &quot;1. Utiliser le Hashage [HSH%]\n&quot;;
        std::cout &lt;&lt; &quot;2. Utiliser le Hashage [EXP+]\n\n&quot;;
        std::cout &lt;&lt; &quot;3. Retour\n&quot;;
        std::cout &lt;&lt; &quot;===============\n&quot;;
        std::cout &lt;&lt; &quot;Choix ? &quot;;
        std::cin &gt;&gt; menu; // l&#039;utilisateur entre le menu qu&#039;il souhaite ouvrir

        //Redirection de l&#039;utilisateur selon son choix grâce à un switch, et on vérifie que menu ne contienne pas n&#039;importequoi
        switch(menu)
        {
        case &#039;1&#039;: //pour menu = 1
            clrscreen();
            setHashHSH();
            std::cout &lt;&lt; &quot;/!\\ Hashage Modifie /!\\\n\n&quot;;
            break;
        case &#039;2&#039;: // pour menu = 2
            clrscreen();
            setHashEXP();
            std::cout &lt;&lt; &quot;/!\\ Hashage Modifie /!\\\n\n&quot;;
            break;
        case &#039;3&#039;: // pour menu = 3
            clrscreen();
            retour = 1;
            break;
        default:
            clrscreen();
            std::cout &lt;&lt; &quot;/!\\ Entree Invalide /!\\\n\n&quot;;
            break;
        }


    }
}

bool menuVerify(bool&amp; quit)
{
    char quitVerify = &#039;x&#039;; // variable de confirmation
    while(quitVerify != &#039;n&#039;) // Boucle de confirmation
                {
                    std::cout &lt;&lt; &quot;Merci d&#039;utiliser Encryptor !\n&quot;;
                    std::cout &lt;&lt; &quot;====================\n\n&quot;;
                    std::cout &lt;&lt; &quot;Souhaitez-vous vraiment quitter ? [o/n]\n&quot;;
                    std::cin &gt;&gt; quitVerify;
                    switch(quitVerify)
                    {
                        case &#039;o&#039;:
                            quitVerify = &#039;n&#039;; // on quitte la vérification
                            quit = 1; //on quitte le programme
                            break;

                        case &#039;n&#039;:
                            clrscreen(); // la verification prend la valeur n donc on sort de la vérification, mais quit est toujours égal a 0
                            break;
                        default:
                            clrscreen();
                            std::cout &lt;&lt; &quot;/!\\ Entree Invalide /!\\\n\n&quot;;
                            break;
                    }
                }
    return quit;
}


void menuAbout()
{
    //Declaration des variables
    bool retour = 0; // Variable de la Boucle Principale
    char menu = &#039;0&#039;; // Choix de l&#039;utilisateur dans le switch

    //avant d&#039;entrer dans le menu on flushe l&#039;ecran
    clrscreen();
    //Boucle principale
    while(retour != 1)
    {
        //Menu Principal
        std::cout &lt;&lt; &quot;A Propos d&#039;Encryptor\n&quot;;
        std::cout &lt;&lt; &quot;===============\n\n&quot;;
        std::cout &lt;&lt; &quot;Encryptor est un logiciel de cryptage de fichiers en console\nCe logiciel est developpe en C++ par Stalker2106\n(contact: Stalker2106x@gmail.com)\n\nLa version actuelle du programme est [Encryptor &quot; &lt;&lt; getVersion() &lt;&lt; &quot;]\n\n&quot;;
        std::cout &lt;&lt; &quot;1. Retour\n&quot;;
        std::cout &lt;&lt; &quot;===============\n&quot;;
        std::cout &lt;&lt; &quot;Choix ? &quot;;
        std::cin &gt;&gt; menu; // l&#039;utilisateur entre le menu qu&#039;il souhaite ouvrir

        //Redirection de l&#039;utilisateur selon son choix grâce à un switch.
        switch(menu)
        {
            case &#039;1&#039;:
                clrscreen();
                retour = 1;
                break;
            default:
                clrscreen();
                std::cout &lt;&lt; &quot;/!\\ Entree Invalide /!\\\n\n&quot;;
                break;
        }

    }
}</code></pre></div><div class="codebox"><pre><code>//cryptage.h

#ifndef CRYPTAGE_H_INCLUDED
#define CRYPTAGE_H_INCLUDED

void hashageHSH(std::string path);
void deHashageHSH(std::string path);
void hashageEXP(std::string path);
void deHashageEXP(std::string path);
#endif // CRYPTAGE_H_INCLUDED</code></pre></div><div class="codebox"><pre class="vscroll"><code>//cryptage.cpp

#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;fstream&gt;
#include &lt;sstream&gt;
#include &quot;fonctions.h&quot;
#include &quot;menus.h&quot;
#include &quot;cryptage.h&quot;

/*
 * Le cryptage HSH remplace un caractère par un entier composé de 3 chiffres en base 10.
 * Ici le hashage est effectué grace à une Boucle for qui utilise un switch comme dictionnaire de définition.
 */


void hashageHSH(std::string path)
{
    //variables de codage
    char lettre = &#039;.&#039;; //variable qui contient la lettre actuellement en lecture.
    short int code = 0; // variable qui contient le caractère crypté

    //variable de sécurité
    char isCrypted = &#039;.&#039;; //variable testant si le fichier est déja crypté ou non.

    //Variables de chemin du systeme de fichier
    std::string file = &quot;na&quot;; //variable qui récupere le chemin fourni par l&#039;utilisateur
    std::string line = &quot;na&quot;; //variable contenant la ligne actuellement lue
    std::string filex = &quot;na&quot;; //variable contenant le chemin du fichier crypté

    //Definition des chemins du systeme de fichier qui seront utilisés.
    file = path; // récuperation du chemin entré par l&#039;utilisateur
    filex = file + &quot;.hsh&quot;; //on crée un fichier &quot;.cdx&quot; contenant le fichier codé.
    std::ifstream read(file.c_str()); //Flux de lecture du fichier non crypté

    if(read)
    {
    //Tout est prêt pour la lecture.
    std::cout &lt;&lt; &quot;L&#039;ouverture du fichier &quot; &lt;&lt; path &lt;&lt; &quot; s&#039;est correctement deroulee.\n\n&quot;;

    // On vérifie que le fichier ne soit pas déja crypté
    isCrypted = read.get(); //On récupère le premier caractère du fichier

        if(isCrypted == &#039;*&#039;) // Si il est déja crypté on affiche une erreur
        {
            std::cout &lt;&lt; &quot;ERREUR: Le fichier slectionne est deja crypte.\n\n&quot;;
        }
        else //Sinon on peut commencer les opérations de cryptage
        {
            std::ofstream write(filex.c_str()); // Flux d&#039;ecriture du fichier crypté
            read.seekg(0, std::ios::beg);
            write &lt;&lt; &quot;*&quot;;
            while(getline(read, line)) //Tant qu&#039;on n&#039;est pas à la fin du fichier, on lit
            {
                for(unsigned short int i = 0; i &lt; line.size(); i++) //Tant qu&#039;on est pas a la fin de la ligne, on crypte
                {
                    lettre = line[i]; //on stocke la lettre lue dans la variable lettre.

                    //CODAGE HSH
                    switch(lettre) // on assigne pour chaque valeur de lettre un code a 3 caractères, et on l&#039;inscrit dans le fichier
                    {
                    case &#039;.&#039;:
                        code = 100;
                        break;
                    case &#039;a&#039;:
                        code = 101;
                        break;
                    case &#039;b&#039;:
                        code = 102;
                        break;
                    case &#039;c&#039;:
                        code = 103;
                        break;
                    case &#039;d&#039;:
                        code = 104;
                        break;
                    case &#039;e&#039;:
                        code = 105;
                        break;
                    case &#039;f&#039;:
                        code = 106;
                        break;
                    case &#039;g&#039;:
                        code = 107;
                        break;
                    case &#039;h&#039;:
                        code = 108;
                        break;
                    case &#039;i&#039;:
                        code = 109;
                        break;
                    case &#039;j&#039;:
                        code = 110;
                        break;
                    case &#039;k&#039;:
                        code = 111;
                        break;
                    case &#039;l&#039;:
                        code = 112;
                        break;
                    case &#039;m&#039;:
                        code = 113;
                        break;
                    case &#039;n&#039;:
                        code = 114;
                        break;
                    case &#039;o&#039;:
                        code = 115;
                        break;
                    case &#039;p&#039;:
                        code = 116;
                        break;
                    case &#039;q&#039;:
                        code = 117;
                        break;
                    case &#039;r&#039;:
                        code = 118;
                        break;
                    case &#039;s&#039;:
                        code = 119;
                        break;
                    case &#039;t&#039;:
                        code = 120;
                        break;
                    case &#039;u&#039;:
                        code = 121;
                        break;
                    case &#039;v&#039;:
                        code = 122;
                        break;
                    case &#039;w&#039;:
                        code = 123;
                        break;
                    case &#039;x&#039;:
                        code = 124;
                        break;
                    case &#039;y&#039;:
                        code = 125;
                        break;
                    case &#039;z&#039;:
                        code = 126;
                        break;
                    case &#039;-&#039;:
                        code = 127;
                        break;
                    case &#039;(&#039;:
                        code = 128;
                        break;
                    case &#039;)&#039;:
                        code = 129;
                        break;
                    case &#039;&quot;&#039;:
                        code = 130;
                        break;
                    case &#039;A&#039;:
                        code = 131;
                        break;
                    case &#039;B&#039;:
                        code = 132;
                        break;
                    case &#039;C&#039;:
                        code = 133;
                        break;
                    case &#039;D&#039;:
                        code = 134;
                        break;
                    case &#039;E&#039;:
                        code = 135;
                        break;
                    case &#039;F&#039;:
                        code = 136;
                        break;
                    case &#039;G&#039;:
                        code = 137;
                        break;
                    case &#039;H&#039;:
                        code = 138;
                        break;
                    case &#039;I&#039;:
                        code = 139;
                        break;
                    case &#039;J&#039;:
                        code = 140;
                        break;
                    case &#039;K&#039;:
                        code = 141;
                        break;
                    case &#039;L&#039;:
                        code = 142;
                        break;
                    case &#039;M&#039;:
                        code = 143;
                        break;
                    case &#039;N&#039;:
                        code = 144;
                        break;
                    case &#039;O&#039;:
                        code = 145;
                        break;
                    case &#039;P&#039;:
                        code = 146;
                        break;
                    case &#039;Q&#039;:
                        code = 147;
                        break;
                    case &#039;R&#039;:
                        code = 148;
                        break;
                    case &#039;S&#039;:
                        code = 149;
                        break;
                    case &#039;T&#039;:
                        code = 150;
                        break;
                    case &#039;U&#039;:
                        code = 151;
                        break;
                    case &#039;V&#039;:
                        code = 152;
                        break;
                    case &#039;W&#039;:
                        code = 153;
                        break;
                    case &#039;X&#039;:
                        code = 154;
                        break;
                    case &#039;Y&#039;:
                        code = 155;
                        break;
                    case &#039;Z&#039;:
                        code = 156;
                        break;
                    case &#039;0&#039;:
                        code = 157;
                        break;
                    case &#039;1&#039;:
                        code = 158;
                        break;
                    case &#039;2&#039;:
                        code = 159;
                        break;
                    case &#039;3&#039;:
                        code = 160;
                        break;
                    case &#039;4&#039;:
                        code = 161;
                        break;
                    case &#039;5&#039;:
                        code = 162;
                        break;
                    case &#039;6&#039;:
                        code = 163;
                        break;
                    case &#039;7&#039;:
                        code = 164;
                        break;
                    case &#039;8&#039;:
                        code = 165;
                        break;
                    case &#039;9&#039;:
                        code = 166;
                        break;
                    case &#039;!&#039;:
                        code = 167;
                        break;
                    case &#039;#&#039;:
                        code = 168;
                        break;
                    case &#039;$&#039;:
                        code = 169;
                        break;
                    case &#039;%&#039;:
                        code = 170;
                        break;
                    case &#039;&amp;&#039;:
                        code = 171;
                        break;
                    case &#039;*&#039;:
                        code = 172;
                        break;
                    case &#039;+&#039;:
                        code = 173;
                        break;
                    case &#039;/&#039;:
                        code = 174;
                        break;
                    case &#039;\\&#039;:
                        code = 175;
                        break;
                    case &#039;[&#039;:
                        code = 176;
                        break;
                    case &#039;]&#039;:
                        code = 177;
                        break;
                    case &#039;^&#039;:
                        code = 178;
                        break;
                    case &#039;_&#039;:
                        code = 179;
                        break;
                    case &#039;{&#039;:
                        code = 180;
                        break;
                    case &#039;|&#039;:
                        code = 181;
                        break;
                    case &#039;}&#039;:
                        code = 182;
                        break;
                    case &#039;~&#039;:
                        code = 183;
                        break;
                    case &#039; &#039;:
                        code = 184;
                        break;
                    case &#039;,&#039;:
                        code = 185;
                        break;
                    case &#039;;&#039;:
                        code = 186;
                        break;
                    case &#039;:&#039;:
                        code = 187;
                        break;
                    case 39: //Cas particulier, pour une apostrophe on dit que lettre = 39
                        code = 188;
                        break;
                    case &#039;&lt;&#039;:
                        code = 189;
                        break;
                    case &#039;&gt;&#039;:
                        code = 190;
                        break;
                    case &#039;@&#039;:
                        code = 191;
                        break;
                    case &#039;?&#039;:
                        code = 192;
                        break;
                    case &#039;=&#039;:
                        code = 193;
                        break;
                    default:
                        code = 999;
                        break;
                    }
                write &lt;&lt; code;
                }
                write &lt;&lt; &quot;\n&quot;;
             }
        }
        clrscreen(); //fin du cryptage, toutes les opérations sont terminées
        std::cout &lt;&lt; &quot;&lt;!&gt; CRYPTAGE EFFECTUE &lt;!&gt;\n\n&quot;;
    }
    else
    {
        clrscreen(); // le fichier n&#039;existe pas, ou n&#039;a pas pu être ouvert
        std::cout &lt;&lt; &quot;ERREUR: Impossible d&#039;ouvrir le fichier en lecture.\n&quot;;
        std::cout &lt;&lt; &quot;Verifiez que vous avez correctement entre le chemin du fichier\n\n&quot;;
    }
}

void deHashageHSH(std::string path)
{
    char lettre = &#039;.&#039;; //variable contenant la lettre qui sera décodée
    char isCrypted = &#039;.&#039;; //on vérifie que le fichier soit crypté
    std::string codex1 = &quot;0&quot;; // 1er chiffre du code
    std::string codex2 = &quot;0&quot;; // 2nd chiffre du code
    std::string codex3 = &quot;0&quot;; // 3eme chiffre du code

    std::string codeCat = &quot;0&quot;;
    short int code = 0; //code complet

    std::string filex = &quot;na&quot;; //variable qui récupere le chemin fourni par l&#039;utilisateur
    std::string file = &quot;na&quot;; //variable contenant le chemin du fichier décrypté

    std::string line = &quot;na&quot;; //variable contenant la ligne actuellement en lecture



    filex = path; // récuperation du chemin entré par l&#039;utilisateur
    file = filex.substr(0, filex.size() - 4); //on crée un fichier &quot;.cdx&quot; contenant le fichier décodé.
    std::ifstream read(filex.c_str()); //Flux de lecture du fichier non crypté

    if(read)
    {
    //Tout est prêt pour la lecture.
        std::cout &lt;&lt; &quot;L&#039;ouverture du fichier &quot; &lt;&lt; path &lt;&lt; &quot; s&#039;est correctement deroulee.\n\n&quot;;

        isCrypted = read.get(); //On récupère le premier caractère du fichier

        if(isCrypted != &#039;*&#039;)
        {
            std::cout &lt;&lt; &quot;ERREUR: Le fichier selectionne n&#039;est pas crypte.\n\n&quot;;
        }
        else
        {
            std::ofstream write(file.c_str()); // Flux d&#039;ecriture du fichier crypté
            while(getline(read, line)) //Tant qu&#039;on n&#039;est pas à la fin, on lit
            {
                for(unsigned int i = 0; i &lt; line.size(); i++)
                {
                    codex1 = line[i]; //on lit le premier caractère et on le stocke dans codex1
                    i++; //comme le curseur a été déplacé d&#039;un cran vers la droite, on incrémente i.
                    codex2 = line[i]; //on lit le second caractère et on le stocke dans codex2
                    i++; //comme le curseur a été déplacé d&#039;un cran vers la droite, on incrémente i.
                    codex3 = line[i]; //on lit le troisieme caractère et on le stocke dans codex3

                    codeCat = codex1 + codex2 + codex3; //On concatène les trois entités du code en une seule string
                    std::istringstream codeConversion(codeCat); // on convertit le code de char vers short int
                    codeConversion &gt;&gt; code; // on inscrit le code converti dans la variable code

                    //DECRYPTAGE
                    switch(code) // on assigne pour chaque code à 3 caractères, une lettre de la table ASCII.
                    {
                    case 100:
                        lettre = &#039;.&#039;;
                        break;
                    case 101:
                        lettre = &#039;a&#039;;
                        break;
                    case 102:
                        lettre = &#039;b&#039;;
                        break;
                    case 103:
                        lettre = &#039;c&#039;;
                        break;
                    case 104:
                        lettre = &#039;d&#039;;
                        break;
                    case 105:
                        lettre = &#039;e&#039;;
                        break;
                    case 106:
                        lettre = &#039;f&#039;;
                        break;
                    case 107:
                        lettre = &#039;g&#039;;
                        break;
                    case 108:
                        lettre = &#039;h&#039;;
                        break;
                    case 109:
                        lettre = &#039;i&#039;;
                        break;
                    case 110:
                        lettre = &#039;j&#039;;
                        break;
                    case 111:
                        lettre = &#039;k&#039;;
                        break;
                    case 112:
                        lettre = &#039;l&#039;;
                        break;
                    case 113:
                        lettre = &#039;m&#039;;
                        break;
                    case 114:
                        lettre = &#039;n&#039;;
                        break;
                    case 115:
                        lettre = &#039;o&#039;;
                        break;
                    case 116:
                        lettre = &#039;p&#039;;
                        break;
                    case 117:
                        lettre = &#039;q&#039;;
                        break;
                    case 118:
                        lettre = &#039;r&#039;;
                        break;
                    case 119:
                        lettre = &#039;s&#039;;
                        break;
                    case 120:
                        lettre = &#039;t&#039;;
                        break;
                    case 121:
                        lettre = &#039;u&#039;;
                        break;
                    case 122:
                        lettre = &#039;v&#039;;
                        break;
                    case 123:
                        lettre = &#039;w&#039;;
                        break;
                    case 124:
                        lettre = &#039;x&#039;;
                        break;
                    case 125:
                        lettre = &#039;y&#039;;
                        break;
                    case 126:
                        lettre = &#039;z&#039;;
                        break;
                    case 127:
                        lettre = &#039;-&#039;;
                        break;
                    case 128:
                        lettre = &#039;(&#039;;
                        break;
                    case 129:
                        lettre = &#039;)&#039;;
                        break;
                    case 130:
                        lettre = &#039;&quot;&#039;;
                        break;
                    case 131:
                        lettre = &#039;A&#039;;
                        break;
                    case 132:
                        lettre = &#039;B&#039;;
                        break;
                    case 133:
                        lettre = &#039;C&#039;;
                        break;
                    case 134:
                        lettre = &#039;D&#039;;
                        break;
                    case 135:
                        lettre = &#039;E&#039;;
                        break;
                    case 136:
                        lettre = &#039;F&#039;;
                        break;
                    case 137:
                        lettre = &#039;G&#039;;
                        break;
                    case 138:
                        lettre = &#039;H&#039;;
                        break;
                    case 139:
                        lettre = &#039;I&#039;;
                        break;
                    case 140:
                        lettre = &#039;J&#039;;
                        break;
                    case 141:
                        lettre = &#039;K&#039;;
                        break;
                    case 142:
                        lettre = &#039;L&#039;;
                        break;
                    case 143:
                        lettre = &#039;M&#039;;
                        break;
                    case 144:
                        lettre = &#039;N&#039;;
                        break;
                    case 145:
                        lettre = &#039;O&#039;;
                        break;
                    case 146:
                        lettre = &#039;P&#039;;
                        break;
                    case 147:
                        lettre = &#039;Q&#039;;
                        break;
                    case 148:
                        lettre = &#039;R&#039;;
                        break;
                    case 149:
                        lettre = &#039;S&#039;;
                        break;
                    case 150:
                        lettre = &#039;T&#039;;
                        break;
                    case 151:
                        lettre = &#039;U&#039;;
                        break;
                    case 152:
                        lettre = &#039;V&#039;;
                        break;
                    case 153:
                        lettre = &#039;W&#039;;
                        break;
                    case 154:
                        lettre = &#039;X&#039;;
                        break;
                    case 155:
                        lettre = &#039;Y&#039;;
                        break;
                    case 156:
                        lettre = &#039;Z&#039;;
                        break;
                    case 157:
                        lettre = &#039;0&#039;;
                        break;
                    case 158:
                        lettre = &#039;1&#039;;
                        break;
                    case 159:
                        lettre = &#039;2&#039;;
                        break;
                    case 160:
                        lettre = &#039;3&#039;;
                        break;
                    case 161:
                        lettre = &#039;4&#039;;
                        break;
                    case 162:
                        lettre = &#039;5&#039;;
                        break;
                    case 163:
                        lettre = &#039;6&#039;;
                        break;
                    case 164:
                        lettre = &#039;7&#039;;
                        break;
                    case 165:
                        lettre = &#039;8&#039;;
                        break;
                    case 166:
                        lettre = &#039;9&#039;;
                        break;
                    case 167:
                        lettre = &#039;!&#039;;
                        break;
                    case 168:
                        lettre = &#039;#&#039;;
                        break;
                    case 169:
                        lettre = &#039;$&#039;;
                        break;
                    case 170:
                        lettre = &#039;%&#039;;
                        break;
                    case 171:
                        lettre = &#039;&amp;&#039;;
                        break;
                    case 172:
                        lettre = &#039;*&#039;;
                        break;
                    case 173:
                        lettre = &#039;+&#039;;
                        break;
                    case 174:
                        lettre = &#039;/&#039;;
                        break;
                    case 175:
                        lettre = 92;
                        break;
                    case 176:
                        lettre = &#039;[&#039;;
                        break;
                    case 177:
                        lettre = &#039;]&#039;;
                        break;
                    case 178:
                        lettre = &#039;^&#039;;
                        break;
                    case 179:
                        lettre = &#039;_&#039;;
                        break;
                    case 180:
                        lettre = &#039;{&#039;;
                        break;
                    case 181:
                        lettre = &#039;|&#039;;
                        break;
                    case 182:
                        lettre = &#039;}&#039;;
                        break;
                    case 183:
                        lettre = &#039;~&#039;;
                        break;
                    case 184:
                        lettre = &#039; &#039;;
                        break;
                    case 185:
                        lettre = &#039;,&#039;;
                        break;
                    case 186:
                        lettre = &#039;;&#039;;
                        break;
                    case 187:
                        lettre = &#039;:&#039;;
                        break;
                    case 188: //Cas particulier, pour une apostrophe on dit que lettre = 39
                        lettre = 39;
                        break;
                    case 189:
                        lettre = &#039;&lt;&#039;;
                        break;
                    case 190:
                        lettre = &#039;&gt;&#039;;
                        break;
                    case 191:
                        lettre = &#039;@&#039;;
                        break;
                    case 192:
                        lettre = &#039;?&#039;;
                        break;
                    case 193:
                        lettre = &#039;=&#039;;
                        break;
                    default:
                        lettre = &#039;_&#039;;
                        break;
                    }
                write &lt;&lt; lettre;
                }
                write &lt;&lt; &quot;\n&quot;;
             }
        }
        clrscreen(); //Toutes les opérations de decryptage sont terminées
        std::cout &lt;&lt; &quot;&lt;!&gt; DECRYPTAGE EFFECTUE &lt;!&gt;\n\n&quot;;
    }
    else
    {
        clrscreen(); // il y a eu un probleme lors de l&#039;ouverture du fichier ou son emplacement a mal été saisi
        std::cout &lt;&lt; &quot;ERREUR: Impossible d&#039;ouvrir le fichier en lecture.\n&quot;;
        std::cout &lt;&lt; &quot;Verifiez que vous avez correctement entre le chemin du fichier\n\n&quot;;
    }
}

/*
 * Le cryptage EXP substitue un caractère a un autre défini sur la table ASCII.
 * Ici le hashage est effectué grace à une Boucle for qui utilise un switch comme dictionnaire de définition.
 */

void hashageEXP(std::string path)
{
    //variables de codage
    char lettre = &#039;.&#039;; //variable qui contient la lettre actuellement en lecture.
    char code = 0; // variable qui contient le caractère crypté

    //variable de sécurité
    char isCrypted = &#039;.&#039;; //variable testant si le fichier est déja crypté ou non.

    //Variables de chemin du systeme de fichier
    std::string file = &quot;na&quot;; //variable qui récupere le chemin fourni par l&#039;utilisateur
    std::string line = &quot;na&quot;; //variable contenant la ligne actuellement lue
    std::string filex = &quot;na&quot;; //variable contenant le chemin du fichier crypté

    //Definition des chemins du systeme de fichier qui seront utilisés.
    file = path; // récuperation du chemin entré par l&#039;utilisateur
    filex = file + &quot;.exp&quot;; //on crée un fichier &quot;.cdx&quot; contenant le fichier codé.
    std::ifstream read(file.c_str()); //Flux de lecture du fichier non crypté

    if(read)
    {
    //Tout est prêt pour la lecture.
        std::cout &lt;&lt; &quot;L&#039;ouverture du fichier &quot; &lt;&lt; path &lt;&lt; &quot; s&#039;est correctement deroulee.\n\n&quot;;

        isCrypted = read.get(); //On récupère le premier caractère du fichier

        if(isCrypted == &#039;*&#039;)
        {
            std::cout &lt;&lt; &quot;ERREUR: Le fichier slectionne est deja crypte.\n\n&quot;;
        }
        else
        {
            std::ofstream write(filex.c_str()); // Flux d&#039;ecriture du fichier crypté
            read.seekg(0, std::ios::beg);
            write &lt;&lt; &quot;*&quot;;
            while(getline(read, line)) //Tant qu&#039;on n&#039;est pas à la fin, on lit
            {
                for(unsigned short int i = 0; i &lt; line.size(); i++) //Tant qu&#039;on a pas atteint la fin de la ligne, on crypte
                {
                    lettre = line[i]; //on stocke le caractère lu dans la variable lettre.

                    //CRYPTAGE
                    switch(lettre) //On assigne a chaque valeur de lettre, un caractère différent.
                    {
                    case &#039;a&#039;:
                        code = &#039;j&#039;;
                        break;
                    case &#039;b&#039;:
                        code = &#039;%&#039;;
                        break;
                    case &#039;c&#039;:
                        code = &#039;@&#039;;
                        break;
                    case &#039;d&#039;:
                        code = &#039;4&#039;;
                        break;
                    case &#039;e&#039;:
                        code = &#039;w&#039;;
                        break;
                    case &#039;f&#039;:
                        code = &#039;Y&#039;;
                        break;
                    case &#039;g&#039;:
                        code = &#039;M&#039;;
                        break;
                    case &#039;h&#039;:
                        code = &#039;I&#039;;
                        break;
                    case &#039;i&#039;:
                        code = &#039;(&#039;;
                        break;
                    case &#039;j&#039;:
                        code = &#039;c&#039;;
                        break;
                    case &#039;k&#039;:
                        code = 39;
                        break;
                    case &#039;l&#039;:
                        code = &#039;;&#039;;
                        break;
                    case &#039;m&#039;:
                        code = &#039;R&#039;;
                        break;
                    case &#039;n&#039;:
                        code = &#039;r&#039;;
                        break;
                    case &#039;o&#039;:
                        code = &#039;T&#039;;
                        break;
                    case &#039;p&#039;:
                        code = &#039;p&#039;;
                        break;
                    case &#039;q&#039;:
                        code = &#039;_&#039;;
                        break;
                    case &#039;r&#039;:
                        code = &#039;x&#039;;
                        break;
                    case &#039;s&#039;:
                        code = &#039; &#039;;
                        break;
                    case &#039;t&#039;:
                        code = &#039;C&#039;;
                        break;
                    case &#039;u&#039;:
                        code = &#039;s&#039;;
                        break;
                    case &#039;v&#039;:
                        code = &#039;m&#039;;
                        break;
                    case &#039;w&#039;:
                        code = &#039;1&#039;;
                        break;
                    case &#039;x&#039;:
                        code = &#039;6&#039;;
                        break;
                    case &#039;y&#039;:
                        code = &#039;~&#039;;
                        break;
                    case &#039;z&#039;:
                        code = &#039;\\&#039;;
                        break;
                    case &#039; &#039;:
                        code = &#039;Q&#039;;
                        break;
                    case &#039;0&#039;:
                        code = &#039;&gt;&#039;;
                        break;
                    case &#039;1&#039;:
                        code = &#039;o&#039;;
                        break;
                    case &#039;2&#039;:
                        code = &#039;5&#039;;
                        break;
                    case &#039;3&#039;:
                        code = &#039;g&#039;;
                        break;
                    case &#039;4&#039;:
                        code = &#039;3&#039;;
                        break;
                    case &#039;5&#039;:
                        code = &#039;a&#039;;
                        break;
                    case &#039;6&#039;:
                        code = &#039;-&#039;;
                        break;
                    case &#039;7&#039;:
                        code = &#039;V&#039;;
                        break;
                    case &#039;8&#039;:
                        code = &#039;f&#039;;
                        break;
                    case &#039;9&#039;:
                        code = &#039;n&#039;;
                        break;
                    case &#039;A&#039;:
                        code = &#039;]&#039;;
                        break;
                    case &#039;B&#039;:
                        code = &#039;&amp;&#039;;
                        break;
                    case &#039;C&#039;:
                        code = &#039;k&#039;;
                        break;
                    case &#039;D&#039;:
                        code = &#039;u&#039;;
                        break;
                    case &#039;E&#039;:
                        code = &#039;B&#039;;
                        break;
                    case &#039;F&#039;:
                        code = &#039;0&#039;;
                        break;
                    case &#039;G&#039;:
                        code = &#039;&lt;&#039;;
                        break;
                    case &#039;H&#039;:
                        code = &#039;q&#039;;
                        break;
                    case &#039;I&#039;:
                        code = &#039;z&#039;;
                        break;
                    case &#039;J&#039;:
                        code = &#039;2&#039;;
                        break;
                    case &#039;K&#039;:
                        code = &#039;d&#039;;
                        break;
                    case &#039;L&#039;:
                        code = &#039;7&#039;;
                        break;
                    case &#039;M&#039;:
                        code = &#039;v&#039;;
                        break;
                    case &#039;N&#039;:
                        code = &#039;S&#039;;
                        break;
                    case &#039;O&#039;:
                        code = &#039;h&#039;;
                        break;
                    case &#039;P&#039;:
                        code = &#039;A&#039;;
                        break;
                    case &#039;Q&#039;:
                        code = &#039;+&#039;;
                        break;
                    case &#039;R&#039;:
                        code = &#039;W&#039;;
                        break;
                    case &#039;S&#039;:
                        code = &#039;e&#039;;
                        break;
                    case &#039;T&#039;:
                        code = &#039;=&#039;;
                        break;
                    case &#039;U&#039;:
                        code = &#039;)&#039;;
                        break;
                    case &#039;V&#039;:
                        code = &#039;E&#039;;
                        break;
                    case &#039;W&#039;:
                        code = &#039;Z&#039;;
                        break;
                    case &#039;X&#039;:
                        code = &#039;i&#039;;
                        break;
                    case &#039;Y&#039;:
                        code = &#039;y&#039;;
                        break;
                    case &#039;Z&#039;:
                        code = &#039;X&#039;;
                        break;
                    case &#039;&amp;&#039;:
                        code = &#039;}&#039;;
                        break;
                    case &#039;&quot;&#039;:
                        code = &#039;:&#039;;
                        break;
                    case 39:
                        code = &#039;U&#039;;
                        break;
                    case &#039;(&#039;:
                        code = &#039;H&#039;;
                        break;
                    case &#039;-&#039;:
                        code = &#039;#&#039;;
                        break;
                    case &#039;_&#039;:
                        code = &#039;t&#039;;
                        break;
                    case &#039;)&#039;:
                        code = &#039;G&#039;;
                        break;
                    case &#039;=&#039;:
                        code = &#039;?&#039;;
                        break;
                    case &#039;+&#039;:
                        code = &#039;l&#039;;
                        break;
                    case &#039;#&#039;:
                        code = &#039;O&#039;;
                        break;
                    case &#039;{&#039;:
                        code = &#039;.&#039;;
                        break;
                    case &#039;[&#039;:
                        code = &#039;{&#039;;
                        break;
                    case &#039;|&#039;:
                        code = &#039;9&#039;;
                        break;
                    case &#039;\\&#039;:
                        code = &#039;!&#039;;
                        break;
                    case &#039;@&#039;:
                        code = &#039;F&#039;;
                        break;
                    case &#039;]&#039;:
                        code = &#039;,&#039;;
                        break;
                    case &#039;}&#039;:
                        code = &#039;K&#039;;
                        break;
                    case &#039;$&#039;:
                        code = &#039;|&#039;;
                        break;
                    case &#039;,&#039;:
                        code = &#039;/&#039;;
                        break;
                    case &#039;;&#039;:
                        code = &#039;b&#039;;
                        break;
                    case &#039;:&#039;:
                        code = &#039;8&#039;;
                        break;
                    case &#039;!&#039;:
                        code = &#039;[&#039;;
                        break;
                    case &#039;%&#039;:
                        code = &#039;L&#039;;
                        break;
                    case &#039;?&#039;:
                        code = &#039;N&#039;;
                        break;
                    case &#039;~&#039;:
                        code = &#039;$&#039;;
                        break;
                    case &#039;.&#039;:
                        code = &#039;D&#039;;
                        break;
                    case &#039;/&#039;:
                        code = &#039;P&#039;;
                        break;
                    case &#039;&lt;&#039;:
                        code = &#039;J&#039;;
                        break;
                    case &#039;&gt;&#039;:
                        code = &#039;&quot;&#039;;
                        break;
                    default:
                        code = &#039;_&#039;;
                        break;
                    }
                write &lt;&lt; code;
                }
                write &lt;&lt; &quot;\n&quot;;
             }
        }
        clrscreen(); //Opérations de cryptage términées
        std::cout &lt;&lt; &quot;&lt;!&gt; CRYPTAGE EFFECTUE &lt;!&gt;\n\n&quot;;
    }
    else
    {
        clrscreen(); //impossible d&#039;ouvrir le fichier, ou le chemin a mal été saisi
        std::cout &lt;&lt; &quot;ERREUR: Impossible d&#039;ouvrir le fichier en lecture.\n&quot;;
        std::cout &lt;&lt; &quot;Verifiez que vous avez correctement entre le chemin du fichier\n\n&quot;;
    }
}


void deHashageEXP(std::string path)
{
    //variables de codage
    char lettre = &#039;.&#039;; //variable qui contient la lettre actuellement en lecture.
    char code = &#039;0&#039;; // variable qui contient le caractère crypté

    //variable de sécurité
    char isCrypted = &#039;.&#039;; //variable testant si le fichier est déja crypté ou non.

    //Variables de chemin du systeme de fichier
    std::string file = &quot;na&quot;; //variable qui récupere le chemin fourni par l&#039;utilisateur
    std::string line = &quot;na&quot;; //variable contenant la ligne actuellement lue
    std::string filex = &quot;na&quot;; //variable contenant le chemin du fichier crypté

    //Definition des chemins du systeme de fichier qui seront utilisés.
    filex = path; // récuperation du chemin entré par l&#039;utilisateur
    file = filex.substr(0, filex.size() - 4); //on crée un fichier &quot;.cdx&quot; contenant le fichier décodé.
    std::ifstream read(filex.c_str()); //Flux de lecture du fichier non crypté

    if(read)
    {
    //Tout est prêt pour la lecture.
    isCrypted = read.get(); //On récupère le premier caractère du fichier
        //on vérifie que le fichier soit bel et bien crypté
        if(isCrypted != &#039;*&#039;)
        {
            std::cout &lt;&lt; &quot;ERREUR: Le fichier selectionne n&#039;est pas crypte.\n\n&quot;;
        }
        else //sinon on commence le décryptage
        {
            std::ofstream write(file.c_str()); // Flux d&#039;ecriture du fichier crypté
            while(getline(read, line)) //Tant qu&#039;on n&#039;est pas à la fin, on lit
            {
                for(unsigned short int i = 0; i &lt; line.size(); i++) //tant qu&#039;on est pas a la fin de la ligne, on décrypte.
                {
                    code = line[i];

                    //DECRYPTAGE
                    switch(code) //on asssocie a chaque valeur de code une lettre.
                    {
                    case &#039;j&#039;:
                        lettre =&#039;a&#039;;
                        break;
                    case &#039;%&#039;:
                        lettre =&#039;b&#039;;
                        break;
                    case &#039;@&#039;:
                        lettre =&#039;c&#039;;
                        break;
                    case &#039;4&#039;:
                        lettre =&#039;d&#039;;
                        break;
                    case &#039;w&#039;:
                        lettre =&#039;e&#039;;
                        break;
                    case &#039;Y&#039;:
                        lettre =&#039;f&#039;;
                        break;
                    case &#039;M&#039;:
                        lettre =&#039;g&#039;;
                        break;
                    case &#039;I&#039;:
                        lettre =&#039;h&#039;;
                        break;
                    case &#039;(&#039;:
                        lettre =&#039;i&#039;;
                        break;
                    case &#039;c&#039;:
                        lettre =&#039;j&#039;;
                        break;
                    case 39:
                        lettre =&#039;k&#039;;
                        break;
                    case &#039;;&#039;:
                        lettre =&#039;l&#039;;
                        break;
                    case &#039;R&#039;:
                        lettre =&#039;m&#039;;
                        break;
                    case &#039;r&#039;:
                        lettre =&#039;n&#039;;
                        break;
                    case &#039;T&#039;:
                        lettre =&#039;o&#039;;
                        break;
                    case &#039;p&#039;:
                        lettre =&#039;p&#039;;
                        break;
                    case &#039;_&#039;:
                        lettre =&#039;q&#039;;
                        break;
                    case &#039;x&#039;:
                        lettre =&#039;r&#039;;
                        break;
                    case &#039; &#039;:
                        lettre =&#039;s&#039;;
                        break;
                    case &#039;C&#039;:
                        lettre =&#039;t&#039;;
                        break;
                    case &#039;s&#039;:
                        lettre =&#039;u&#039;;
                        break;
                    case &#039;m&#039;:
                        lettre =&#039;v&#039;;
                        break;
                    case &#039;1&#039;:
                        lettre =&#039;w&#039;;
                        break;
                    case &#039;6&#039;:
                        lettre =&#039;x&#039;;
                        break;
                    case &#039;~&#039;:
                        lettre =&#039;y&#039;;
                        break;
                    case &#039;\\&#039;:
                        lettre =&#039;z&#039;;
                        break;
                    case &#039;Q&#039;:
                        lettre =&#039; &#039;;
                        break;
                    case &#039;&gt;&#039;:
                        lettre =&#039;0&#039;;
                        break;
                    case &#039;o&#039;:
                        lettre =&#039;1&#039;;
                        break;
                    case &#039;5&#039;:
                        lettre =&#039;2&#039;;
                        break;
                    case &#039;g&#039;:
                        lettre =&#039;3&#039;;
                        break;
                    case &#039;3&#039;:
                        lettre =&#039;4&#039;;
                        break;
                    case &#039;a&#039;:
                        lettre =&#039;5&#039;;
                        break;
                    case &#039;-&#039;:
                        lettre =&#039;6&#039;;
                        break;
                    case &#039;V&#039;:
                        lettre =&#039;7&#039;;
                        break;
                    case &#039;f&#039;:
                        lettre =&#039;8&#039;;
                        break;
                    case &#039;n&#039;:
                        lettre =&#039;9&#039;;
                        break;
                    case &#039;]&#039;:
                        lettre =&#039;A&#039;;
                        break;
                    case &#039;&amp;&#039;:
                        lettre =&#039;B&#039;;
                        break;
                    case &#039;k&#039;:
                        lettre =&#039;C&#039;;
                        break;
                    case &#039;u&#039;:
                        lettre =&#039;D&#039;;
                        break;
                    case &#039;B&#039;:
                        lettre =&#039;E&#039;;
                        break;
                    case &#039;0&#039;:
                        lettre =&#039;F&#039;;
                        break;
                    case &#039;&lt;&#039;:
                        lettre =&#039;G&#039;;
                        break;
                    case &#039;q&#039;:
                        lettre =&#039;H&#039;;
                        break;
                    case &#039;z&#039;:
                        lettre =&#039;I&#039;;
                        break;
                    case &#039;2&#039;:
                        lettre =&#039;J&#039;;
                        break;
                    case &#039;d&#039;:
                        lettre =&#039;K&#039;;
                        break;
                    case &#039;7&#039;:
                        lettre =&#039;L&#039;;
                        break;
                    case &#039;v&#039;:
                        lettre =&#039;M&#039;;
                        break;
                    case &#039;S&#039;:
                        lettre =&#039;N&#039;;
                        break;
                    case &#039;h&#039;:
                        lettre =&#039;O&#039;;
                        break;
                    case &#039;A&#039;:
                        lettre =&#039;P&#039;;
                        break;
                    case &#039;+&#039;:
                        lettre =&#039;Q&#039;;
                        break;
                    case &#039;W&#039;:
                        lettre =&#039;R&#039;;
                        break;
                    case &#039;e&#039;:
                        lettre =&#039;S&#039;;
                        break;
                    case &#039;=&#039;:
                        lettre =&#039;T&#039;;
                        break;
                    case &#039;)&#039;:
                        lettre =&#039;U&#039;;
                        break;
                    case &#039;E&#039;:
                        lettre =&#039;V&#039;;
                        break;
                    case &#039;Z&#039;:
                        lettre =&#039;W&#039;;
                        break;
                    case &#039;i&#039;:
                        lettre =&#039;X&#039;;
                        break;
                    case &#039;y&#039;:
                        lettre =&#039;Y&#039;;
                        break;
                    case &#039;X&#039;:
                        lettre =&#039;Z&#039;;
                        break;
                    case &#039;}&#039;:
                        lettre =&#039;&amp;&#039;;
                        break;
                    case &#039;:&#039;:
                        lettre =&#039;&quot;&#039;;
                        break;
                    case &#039;U&#039;:
                        lettre = 39;
                        break;
                    case &#039;H&#039;:
                        lettre =&#039;(&#039;;
                        break;
                    case &#039;#&#039;:
                        lettre =&#039;-&#039;;
                        break;
                    case &#039;t&#039;:
                        lettre =&#039;_&#039;;
                        break;
                    case &#039;G&#039;:
                        lettre =&#039;)&#039;;
                        break;
                    case &#039;?&#039;:
                        lettre =&#039;=&#039;;
                        break;
                    case &#039;l&#039;:
                        lettre =&#039;+&#039;;
                        break;
                    case &#039;O&#039;:
                        lettre =&#039;#&#039;;
                        break;
                    case &#039;.&#039;:
                        lettre =&#039;{&#039;;
                        break;
                    case &#039;{&#039;:
                        lettre =&#039;[&#039;;
                        break;
                    case &#039;9&#039;:
                        lettre =&#039;|&#039;;
                        break;
                    case &#039;!&#039;:
                        lettre =&#039;\\&#039;;
                        break;
                    case &#039;F&#039;:
                        lettre =&#039;@&#039;;
                        break;
                    case &#039;,&#039;:
                        lettre =&#039;]&#039;;
                        break;
                    case &#039;K&#039;:
                        lettre =&#039;}&#039;;
                        break;
                    case &#039;|&#039;:
                        lettre =&#039;$&#039;;
                        break;
                    case &#039;/&#039;:
                        lettre =&#039;,&#039;;
                        break;
                    case &#039;b&#039;:
                        lettre =&#039;;&#039;;
                        break;
                    case &#039;8&#039;:
                        lettre =&#039;:&#039;;
                        break;
                    case &#039;[&#039;:
                        lettre =&#039;!&#039;;
                        break;
                    case &#039;L&#039;:
                        lettre =&#039;%&#039;;
                        break;
                    case &#039;N&#039;:
                        lettre =&#039;?&#039;;
                        break;
                    case &#039;$&#039;:
                        lettre =&#039;~&#039;;
                        break;
                    case &#039;D&#039;:
                        lettre =&#039;.&#039;;
                        break;
                    case &#039;P&#039;:
                        lettre =&#039;/&#039;;
                        break;
                    case &#039;J&#039;:
                        lettre =&#039;&lt;&#039;;
                        break;
                    case &#039;&quot;&#039;:
                        lettre =&#039;&gt;&#039;;
                        break;
                    default:
                        lettre = &#039;_&#039;;
                        break;
                    }
                write &lt;&lt; lettre;
                }
                write &lt;&lt; &quot;\n&quot;;
             }
        }
        clrscreen(); //toutes les opérations de decryptage sont terminées
        std::cout &lt;&lt; &quot;&lt;!&gt; DECRYPTAGE EFFECTUE &lt;!&gt;\n\n&quot;;
    }
    else
    {
        clrscreen(); // l&#039;utilisateur a mal entré le chemin du fichier, ou il y a eu une erreur a l&#039;ouverture.
        std::cout &lt;&lt; &quot;ERREUR: Impossible d&#039;ouvrir le fichier en lecture.\n&quot;;
        std::cout &lt;&lt; &quot;Verifiez que vous avez correctement entre le chemin du fichier\n\n&quot;;
    }
}</code></pre></div><div class="codebox"><pre><code>//fonctions.h

#ifndef FONCTIONS_H_INCLUDED
#define FONCTIONS_H_INCLUDED

void clrscreen();
std::string currentHash();
void setHashHSH();
void setHashEXP();
short int getHashNum();
void getDecryptHash(std::string&amp; path);
void choixHashage(short int numHash, std::string&amp; path);
std::string createTxt();
std::string getVersion();

#endif // FONCTIONS_H_INCLUDED</code></pre></div><div class="codebox"><pre class="vscroll"><code>//fonctions.cpp

#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;fstream&gt;
#include &lt;limits&gt;
#include &quot;fonctions.h&quot;
#include &quot;menus.h&quot;
#include &quot;cryptage.h&quot;

void clrscreen() //Fonction qui flushe l&#039;écran
{
    short int nb = 20;
    for(short int i = 0; i &lt;= nb; i++) //boucle for qui saute 20 lignes
    {
        std::cout &lt;&lt; &quot;\n&quot;;
    }
}

std::string createTxt() //Fonction qui crée un fichier texte contenant une ligne fournie par l&#039;utilisateur
{
    //declaration des variables
    std::string ligne = &quot;&quot;; // ligne saisie par l&#039;utilisateur
    std::string path = &quot;&quot;; //chemin complet souhaité par l&#039;utilisateur
    std::string chemin = &quot;&quot;; //chemin entré par l&#039;utilisateur
    std::string nomFichier = &quot;&quot;; //Nom du fichier entré par l&#039;utilisateur

    //On demande comment nommer le fichier
    std::cout &lt;&lt; &quot;Comment souhaitez vous nommer votre fichier ?\n(Ex: Fichier.txt)\n\n-|&quot;;
    std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(),&#039;\n&#039;);
    std::getline(std::cin, nomFichier);
    clrscreen();

    //On demande dans quel répertoire le placer
    std::cout &lt;&lt; &quot;Ou souhaitez vous placer le fichier ?\n(Ex: C:/Documents/ )\n\n-|&quot;;
    std::getline(std::cin, chemin);

    // on concatène le chemin complet
    path = chemin + nomFichier; // on concatène les string pour creer un chemin valide
    clrscreen();

    //On indique a l&#039;utilisateur le chamin complet, et on lui demande de saisir sa ligne.
    std::cout &lt;&lt; &quot;Le fichier \&quot;&quot; &lt;&lt; nomFichier &lt;&lt; &quot;\&quot; sera cree dans le repertoire : &quot;&quot;&quot; &lt;&lt; chemin &lt;&lt; &quot;&quot;&quot;\n(Chemin complet: \&quot;&quot; &lt;&lt; path &lt;&lt; &quot;\&quot;)\n&quot;; //on affiche la saisie a l&#039;utilisateur
    std::cout &lt;&lt; &quot;====================\n\n&quot;;
    std::cout &lt;&lt; &quot;Redigez le message a crypter ci-dessous :\n\n&quot;;
    std::getline(std::cin, ligne);
    std::ofstream write(path.c_str());
    write &lt;&lt; ligne;
    return path;
}

std::string currentHash() // Fonction qui récupere le hashage actuel dans le fichier Hash.tbl
{
    std::string hashTbl = &quot;Non definie&quot;;
    std::ifstream param(&quot;Hash.tbl&quot;);
    std::getline(param, hashTbl);
    return hashTbl;
}

void setHashHSH() // Fonction qui définit le hashage courant à HSH%
{
    std::string hashTbl = &quot;HSH%&quot;;
    std::ofstream param(&quot;Hash.tbl&quot;);
    param &lt;&lt; hashTbl;
}

void setHashEXP() // Fonction qui définit le hashage courant à EXP+
{
    std::string hashTbl = &quot;EXP+&quot;;
    std::ofstream param(&quot;Hash.tbl&quot;);
    param &lt;&lt; hashTbl;
}

short int getHashNum() // Fonction qui a chaque type de hashage associe un numéro
{
    std::string Hsh;
    Hsh = currentHash();
    if(Hsh == &quot;HSH%&quot;)
    {
        return 1;
    }
    else if(Hsh == &quot;EXP+&quot;)
    {
        return 2;
    }
    else
    {
        return 0;
    }

}

void choixHashage(short int numHash, std::string&amp; path) //Fonction qui redirige le codage vers le bon hashage en fonction du numéro
{
                if(numHash == 1)
                {
                    hashageHSH(path);
                }
                else if(numHash == 2)
                {
                    hashageEXP(path);
                }
                else
                {
                    clrscreen();
                    std::cout &lt;&lt; &quot;ERREUR: Hashage non defini ou inconnu.\n\n&quot;;
                }
}

void getDecryptHash(std::string&amp; path) //Fonction qui récupere l&#039;extension du fichier a décrypter afin de déterminer le hashage nécéssaire au décodage
{
    std::string ext = &quot;&quot;;
    ext = path.substr(path.size() - 3, path.size());
    if(ext == &quot;hsh&quot;)
    {
        deHashageHSH(path);
    }
    else if(ext == &quot;exp&quot;)
    {
        deHashageEXP(path);
    }
    else
    {
        clrscreen();
        std::cout &lt;&lt; &quot;ERREUR: Hashage du fichier inconnu / corrompu.\n\n&quot;;
    }
}



std::string getVersion() // On récupère la version du programme.
{
    std::string version = &quot;Beta v1.5.2&quot;;
    return version;
}</code></pre></div>]]></description>
			<author><![CDATA[dummy@example.com (Destroyers)]]></author>
			<pubDate>Mon, 21 Jan 2013 09:47:12 +0000</pubDate>
			<guid>http://forum.ubuntu-fr.org/viewtopic.php?pid=12285181#p12285181</guid>
		</item>
		<item>
			<title><![CDATA[Réponse à&#160;:  [C++] Sondage: programmes de chiffrement amateur. [Resolu]]]></title>
			<link>http://forum.ubuntu-fr.org/viewtopic.php?pid=12284931#p12284931</link>
			<description><![CDATA[<div class="quotebox"><blockquote><div><p>Ici, Abandon signifie simplement qu&#039;il abandonne la conversion DU caractère en cours</p></div></blockquote></div><p>Donc interface incompréhensible, car messages incompréhensibles.</p><div class="quotebox"><blockquote><div><p>Si le fichier résultat est vide, peut être as tu oublié de l&#039;enregistrer ? Car cela, je suis certain que ça fonctionne.</p></div></blockquote></div><p>Si le fichier est vide, c&#039;est que je l&#039;ai enregistré, non ?<br />Je l&#039;ai refait, là ça a marché. Bizarre.</p><div class="quotebox"><blockquote><div><p>As tu regardé le texte crypté en appuyant sur 2) ?</p></div></blockquote></div><p>En effet, il semble me montrer le texte <strong>chiffré</strong>.</p><br /><div class="quotebox"><blockquote><div><p>vous aussi vous êtes passés par des mauvais programmes à vos débuts</p></div></blockquote></div><p>Pas avec la prétention de faire du chiffrement.</p><br /><div class="quotebox"><blockquote><div><p>Bon... nos logiciels de chiffrements sont encore en Beta</p></div></blockquote></div><p>Ce sont des logiciels en beta, là-dessus il n&#039;y a aucun doute.<br />Des logiciels de chiffrement, éventuellement.<br />De potentiels bons logiciels de chiffrement, il n&#039;y a absolument rien qui le laisse penser.<br />Ce qui est sûr, c&#039;est que ce sont des logiciels que personne de sensé n&#039;utilisera, vue leur manière de fonctionner et l&#039;opacité complète de leur fonctionnement <img src="http://forum.ubuntu-fr.org/img/smilies/smile.png" width="15" height="15" alt="smile" /></p><br /><div class="quotebox"><blockquote><div><p>Pour l&#039;interface... Je sais pas trop comment améliorer vu qu&#039;il y a plein d&#039;options... je devrais tout mettre dans la même fenêtre ? cela ferait 9 options... 11 avec une prochaine mise à jour. ça ne serait pas très agréable :S</p></div></blockquote></div><p>Je l&#039;ai écrit, je le réécris : en faisant une interface avec un prompt, en utilisant la bibliothèque readline.</p><p>Et pour être plus précis :<br />- si vous tenez absolument à faire une interface interactive (c&#039;est super chiant une interface interactive en ligne de commande hein), alors utilisez la bibliothèque readline ;<br />- si vous voulez faire quelque chose de potentiellement efficace, abandonnez l&#039;interactif et utilisez les arguments de la commande, avec la bibliothèque getopt par exemple.</p><p>&quot;Tapez 1 pour X, tapez 2 pour Y&quot;, c&#039;est les (mauvais) programmes des années 70/80 qui fonctionnaient comme ça !</p><br /><br /><br /><p>Et encore une fois : nous sommes incapables de dire quoi que ce soit sur la sécurité de vos programmes vu qu&#039;on n&#039;en voit pas le code source. Tout ce qu&#039;on peut faire ici, c&#039;est donner des avis sur des interfaces. C&#039;est tout. Si vous voulez des avis sur la sécurité, montrez vos codes sources.</p><p>Vous voulez les avis de libristes sur du code ? Montrez des logiciels libres !<br />Vous voulez les avis de développeurs sur du code ? Montrez des sources !<br />Vous voulez les avis d&#039;utilisateurs sur une interface utilisateur ? Faites ce que vous faites, montrez une interface et cachez le reste...</p>]]></description>
			<author><![CDATA[dummy@example.com (tiramiseb)]]></author>
			<pubDate>Mon, 21 Jan 2013 09:31:49 +0000</pubDate>
			<guid>http://forum.ubuntu-fr.org/viewtopic.php?pid=12284931#p12284931</guid>
		</item>
		<item>
			<title><![CDATA[Réponse à&#160;:  [C++] Sondage: programmes de chiffrement amateur. [Resolu]]]></title>
			<link>http://forum.ubuntu-fr.org/viewtopic.php?pid=12284761#p12284761</link>
			<description><![CDATA[<p>CRYPTconsol a une meilleure sécurité que Encryptor par ce qu&#039;il a 5 types d&#039;encodages différents choisis aléatoirement à chaque tentatives de chiffrements. De plus, si tu modifie un fichier chiffré par CRYPTconsol, il le reconnaîtra et jugera ton fichier comme étant corrompu.</p><div class="codebox"><pre><code> Attention: un caractère n&#039;a pas été reconnu... Abandon.</code></pre></div><p>Ici, Abandon signifie simplement qu&#039;il abandonne la conversion DU caractère en cours: il restera inchangé. du coups, le reste du chiffrage s&#039;est bien déroulé.<br />Ici, je pense que le caractère non reconnu est le retour chariot que tu as fait en appuyant sur entrée. J&#039;essaie de régler ça.</p><p>Si le fichier résultat est vide, peut être as tu oublié de l&#039;enregistrer ? Car cela, je suis certain que ça fonctionne.<br />As tu regardé le texte crypté en appuyant sur 2) ?</p><p>Bon... nos logiciels de chiffrements sont encore en Beta, hein, faut pas trop cracher dessus x)<br />Et c&#039;est le premier vrai programme qu&#039;on fait tout les deux, ils ne peuvent pas être bon... vous aussi vous êtes passés par des mauvais programmes à vos débuts x)</p><p>Pour l&#039;interface... Je sais pas trop comment améliorer vu qu&#039;il y a plein d&#039;options... je devrais tout mettre dans la même fenêtre ? cela ferait 9 options... 11 avec une prochaine mise à jour. ça ne serait pas très agréable :S</p>]]></description>
			<author><![CDATA[dummy@example.com (Destroyers)]]></author>
			<pubDate>Mon, 21 Jan 2013 09:05:55 +0000</pubDate>
			<guid>http://forum.ubuntu-fr.org/viewtopic.php?pid=12284761#p12284761</guid>
		</item>
		<item>
			<title><![CDATA[Réponse à&#160;:  [C++] Sondage: programmes de chiffrement amateur. [Resolu]]]></title>
			<link>http://forum.ubuntu-fr.org/viewtopic.php?pid=12283861#p12283861</link>
			<description><![CDATA[<p>Salut,</p><p>Sans les sources tu ne pourras avoir aucun retour intéressant.<br /><strong>On ne pourra pas évaluer la qualité d&#039;un programmeur en se basant uniquement sur la façon dont son programme fonctionne.</strong><br />En plus, distribuer les programmes de cette manière-là est la meilleure façon de les rendre compatibles avec un minimum d&#039;environnements.</p><p>Il faut savoir que la programmation dans ce domaine est TRÈS complexe, j&#039;ai lu de nombreux articles sur le sujet, notamment sur les erreurs qu&#039;on fait quand on veut réimplémenter ce genre de choses (surtout qu&#039;il existe déjà des bibliothèques très solides pour ça) - malheureusement je n&#039;ai plus les pointeurs.</p><br /><div class="quotebox"><cite>Stalker2106 a écrit&#160;:</cite><blockquote><div><p>Me pencher sur zenity ? pourquoi pas, ca me permettrait de maitriser l&#039;environnement de fenetres GTK+, cela dit c&#039;était vraiment plus un défi qu&#039;un projet.</p></div></blockquote></div><p>Non. Te pencher sur Zenity te permettra de savoir afficher des fenêtres à partir d&#039;un script shell. Rien à voir avec la maîtrise de GTK+, loin de là.</p><br /><p>Concernant l&#039;interface de vos logiciels, elles sont toutes les deux chiantes à utiliser.<br />L&#039;interface d&#039;Encryptor reste plus facile à utiliser, celle de CRYPTconsol est carrément imbitable ; notamment il faut plein de fois faire Entrée...</p><br /><p>Extrait de l&#039;interface de CRYPTconsol :</p><div class="codebox"><pre><code>Vous voulez crypter votre texte: ... 
Attention: un caractère n&#039;a pas été reconnu... Abandon.
Votre texte a bien été chiffré.</code></pre></div><p>&quot;abandon&quot; ou alors &quot;bien chiffré&quot; !?<br />(le fichier résultat est vide, j&#039;imagine que le texte n&#039;a pas bien été chiffré alors... très mauvaise gestion des erreurs)<br />(mon texte est &quot;toto&quot;, je ne vois pas ce qui peut être &quot;pas reconnu&quot; comme caractère, entre &quot;t&quot; et &quot;o&quot;)</p><br /><br /><p>Vous auriez mieux dû faire un prompt interactif, avec la bibliothèque readline par exemple.</p><br /><br /><br /><div class="quotebox"><blockquote><div><p>il est évident que CRYPTconsol possède une sécurité supplémentaire a son concurrent direct</p></div></blockquote></div><p>Ah ouais ? Cela n&#039;est pas du tout évident pour moi, où est cette sécurité supplémentaire !?</p><br /><br /><br /><p>PS: je saigne des yeux quand j&#039;utilise Encryptor, car tu utilises les anglicismes &quot;cryptage&quot;, &quot;crypter&quot; et &quot;décrypter&quot; là où tu devrais utiliser &quot;chiffrement&quot;, &quot;chiffrer&quot; et &quot;déchiffrer&quot;.<br />Surtout que &quot;décrypter&quot; existe en français, il signifie &quot;casser le chiffrement&quot; alors que &quot;déchiffrer&quot; signifie &quot;utiliser le chiffre pour obtenir le contenu&quot;.<br /><a href="http://fr.wikipedia.org/wiki/Chiffre_(cryptologie)">http://fr.wikipedia.org/wiki/Chiffre_(cryptologie)</a></p><p>L&#039;auteur de CRYPTconsol prouve là qu&#039;il s&#039;est mieux documenté sur ce domaine... mais il utilise quand même &quot;crypter&quot; par ci par là.</p><br /><br /><p>PPS: tout ce que j&#039;arrive à entr&#039;apercevoir là, c&#039;est que vous êtes tous deux de mauvais programmeurs.</p>]]></description>
			<author><![CDATA[dummy@example.com (tiramiseb)]]></author>
			<pubDate>Mon, 21 Jan 2013 07:06:38 +0000</pubDate>
			<guid>http://forum.ubuntu-fr.org/viewtopic.php?pid=12283861#p12283861</guid>
		</item>
	</channel>
</rss>
