Décryptage c++

Description

Ce programme permet de décrypter n'importe quel fichier dont le codage est constant (exemple du code césar).

Dans un premier temps il fait une boucle en augmentant la valeur ascii de chaque caractère.
Puis il enregistre ses résultats dans un fichier nommé "Fichier_e.txt"

Ensuite il propose de rechercher des mots provenant d'une base de données (dictionnaire) avec le résultat. Pour ce faire, vous devez rentrer le nom de la base de donnée (ici "database.txt") et une affinité de recherche (qui permet de trouver tous les mot qui ont en commun ce nombre de caractères).
Ceci étant fait, il affiche les mots trouvés.

Enfin il ne reste qu'a ouvrir "Fichier_e.txt" et taper une recherche de l'un de ces mots pour avoir la ligne où ce trouve le bon résultat.

Source / Exemple :


#include <iostream>
#include <string>
#include <fstream>
#include <vector>

using namespace std;

int main()
{

cout << "\t\t******* Bienvenue dans RY-Decrypt 1.0 ********"  << endl << endl;

//********** Partie Decryptage **********/

bool compar;

    char m_dir[200];
vector <char>v;
    cout <<endl << "Chemin du fichier a decrypter : " ;
    cin >> m_dir;

    ifstream fin(m_dir);

    char ch;
    char *d;
    while (fin.get(ch))
    {
       v.push_back(ch);
        d+=ch;
    }

    ofstream fichier("Fichier_e.txt", ios::out | ios::trunc);
    bool prendre = false;
    std::string mot;
    int ligneComprise = 0;
    if (fichier)
    {

cout << "\nEn travail...";
        for (int i = 0; i < 256; i++)
        {
            for (int t = 0; t < v.size();t++)
            {
                v.at(t) = v.at(t) + 'i';
                if (v.at(t) != '\a' && isalnum(v.at(t)))

                fichier<< v.at(t);

            }

            fichier<<endl<<endl<<"................................."<<endl<<endl;

        }

        fichier.close();
    }

int rech = 2;
cout << endl << endl<<"Voulez vous comparer avec une base de donnees ? (1)Oui (2)Non : ";
cin >> rech;
if (rech == 1)
{
string database = "";
cout <<endl << endl << "Nom de la base de donnees : ";
cin >> database;
//************Partie recherche*************

int affinite = 100;

cout << endl << "Affinite de votre recherche : ";
cin >> affinite;
cout << "\n\n\n";
if (affinite > 1)
{

    char ctr_e = '\0';
    string tmp_d;

    int var = 0;

    vector <string> vec_d;
    string str_e = "";

    ifstream tempf_e ("Fichier_e.txt", ios::in);
    if (tempf_e)
    {

        while (tempf_e.get(ctr_e))
        {
            str_e += char(ctr_e);
        }
        tempf_e.close();

    }

    else
    {
        cerr << "Erreur : ouverture Fichier_e" << endl;
    }

    var = 0;
    ctr_e = '\0';

    ifstream tempf_d (database.c_str(), ios::in);
    if (tempf_d)
    {
cout << "\nEn travail...\n\n";
        while (getline(tempf_d,tmp_d))

            vec_d.push_back(tmp_d);
        tempf_d.close();
    }
    else
    {
        cerr << "Erreur : ouverture " << database  << endl;
    }

int occ = 0;
int nbLigne = 1;
    for (var = 0; var < (int)vec_d.size(); var++)
    {
        int pos = str_e.find(vec_d[var]);
        if (pos != -1 && vec_d[var].size() >= affinite)
        {
         cout << "->Mot trouve : "<< vec_d[var] << endl;

occ++;
        }

pos =0;

    }

cout << endl <<  "Il y a " << occ << " occurence.";

}
}
  cout << ("\n\n\n\n");

    system("PAUSE");

    return 0;
}

Conclusion :


Assez laborieux, complexe à utiliser... mais ça ne reste que la toute première version :)

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.