Encrypteur en langage c++
Tibus
-
Tibus -
Tibus -
Bonjour à tous,
Je suis passionné par la programmation en C notamment et je m'essaye à réinventer le cryptage :)
Je viens d'écrire un code pour crypter!
Voila l'objectif : Changer un 'A' en 1, 'B' en 2 si la cle entrée est 1.
Le problème est que je ne sais pas comment m'y prendre pour terminer et éviter que les valeurs s'ajoutent.
Je voudrai obtenir:
MOT INIT : ABC -> cle : 1 -> MOT CRYPT : 1-2-3
MOT INIT : ABC -> cle : 3 -> MOT CRYPT : 3-4-5.
Mon problème c'est qu'en C++ je ne vois pas comment obtenir les tirets dans mon tableau de type long et je ne sais pas comment faire pour éviter que les valeurs s'ajoutent!
Voila le code :
#include <iostream>
#include <string>
#include <vector>
#include <cmath>
#include <ctime>
#include <cstdlib>
#include <fstream>
//MEMO pour X=26->A=3
using namespace std;
int main()
{
int i(0);
char motEntr[]={""};
int valX(0);
long cle(0);
char motCle(0);
char motCrypt(0);
cout<<"Saisissez votre mot a encrypter ci-dessous : "<<endl;
cin>>motEntr;
cout<<"Test : Bonjour "<<motEntr<<endl;
cout<<"Saisissez une clef pour 'A' (entre 1 et 25) ci-dessous : "<<endl;
cin>>valX;
cle=(valX+63);
for(i=0;i<strlen(motEntr);i++)
{
motCle=(motEntr[i]-cle);
motCrypt+=motCle;
motCrypt+="-";
}
cout<<"Votre mot encrypte est : "<<motCrypt<<endl;
string const fichierEncr("Encrypt.txt");
ofstream flxFichierEncr(fichierEncr.c_str());
if(flxFichierEncr)
{
flxFichierEncr<<"Mot a encrypter : "<<motEntr<<endl;
flxFichierEncr<<"Valeur de 'X' = "<<valX<<endl;
flxFichierEncr<<"Mot encrypte : "<<motCrypt<<endl;
}
else
{
cout << "ERREUR: Impossible d'ouvrir le fichier." << endl;
}
return 0;
}
Je vous remerci d'avance.
Tibus
Je suis passionné par la programmation en C notamment et je m'essaye à réinventer le cryptage :)
Je viens d'écrire un code pour crypter!
Voila l'objectif : Changer un 'A' en 1, 'B' en 2 si la cle entrée est 1.
Le problème est que je ne sais pas comment m'y prendre pour terminer et éviter que les valeurs s'ajoutent.
Je voudrai obtenir:
MOT INIT : ABC -> cle : 1 -> MOT CRYPT : 1-2-3
MOT INIT : ABC -> cle : 3 -> MOT CRYPT : 3-4-5.
Mon problème c'est qu'en C++ je ne vois pas comment obtenir les tirets dans mon tableau de type long et je ne sais pas comment faire pour éviter que les valeurs s'ajoutent!
Voila le code :
#include <iostream>
#include <string>
#include <vector>
#include <cmath>
#include <ctime>
#include <cstdlib>
#include <fstream>
//MEMO pour X=26->A=3
using namespace std;
int main()
{
int i(0);
char motEntr[]={""};
int valX(0);
long cle(0);
char motCle(0);
char motCrypt(0);
cout<<"Saisissez votre mot a encrypter ci-dessous : "<<endl;
cin>>motEntr;
cout<<"Test : Bonjour "<<motEntr<<endl;
cout<<"Saisissez une clef pour 'A' (entre 1 et 25) ci-dessous : "<<endl;
cin>>valX;
cle=(valX+63);
for(i=0;i<strlen(motEntr);i++)
{
motCle=(motEntr[i]-cle);
motCrypt+=motCle;
motCrypt+="-";
}
cout<<"Votre mot encrypte est : "<<motCrypt<<endl;
string const fichierEncr("Encrypt.txt");
ofstream flxFichierEncr(fichierEncr.c_str());
if(flxFichierEncr)
{
flxFichierEncr<<"Mot a encrypter : "<<motEntr<<endl;
flxFichierEncr<<"Valeur de 'X' = "<<valX<<endl;
flxFichierEncr<<"Mot encrypte : "<<motCrypt<<endl;
}
else
{
cout << "ERREUR: Impossible d'ouvrir le fichier." << endl;
}
return 0;
}
Je vous remerci d'avance.
Tibus
A voir également:
- Encrypteur en langage c++
- Langage ascii - Guide
- Langage binaire - Guide
- Pascal langage - Télécharger - Édition & Programmation
- Langage visual basic - Télécharger - Langages
- Langage basic gratuit - Télécharger - Édition & Programmation
3 réponses
Bonsoir :)
Les commentaires t'en diront plus, je ne suis pas une bête de C++ (langage que je n'utilise que très peu) mais voici une piste de solution :
Les commentaires t'en diront plus, je ne suis pas une bête de C++ (langage que je n'utilise que très peu) mais voici une piste de solution :
#include <iostream> #include <string> #include <vector> #include <cmath> #include <ctime> #include <cstdlib> #include <fstream> #include <sstream> // sstream est nécessaire pour travailler avec un stringstream //MEMO pour X=26->A=3 using namespace std; int main() { int i(0); string motEntr; int valX(0); long cle(0); string motCle; string motCrypt; cout << "Saisissez votre mot a encrypter ci-dessous : "<<endl; cin >> motEntr; cout << "Test : Bonjour "<<motEntr<<endl; cout << "Saisissez une clef pour 'A' (entre 1 et 25) ci-dessous : "<<endl; cin >> valX; // la valeur numérique de A est 97. On va donc devoir retirer 97 à chaque lettre mais en ajoutant la valeur de valX cle = (97 - valX); stringstream buffer; for(i = 0; i < motEntr.length(); i++) { // on récupère la valeur ASCII (valeur numérique entière) de la lettre dans la string entrée int numLettre = (int)motEntr[i]; // on soustrait la valeur de clef a la valeur numérique de la lettre int crypt = numLettre - cle; // on ajoute au stringstream la nouvelle valeur numérique obtenue buffer << crypt; // si ce n'est pas le dernier chiffre on ajoute un tiret if(i < motEntr.length() - 1) buffer << "-"; } // une fois tout le mot parcouru, on envoie le contenu du stringstream dans le buffer buffer >> motCrypt; // et on l'affiche à l'écran cout<<"Votre mot encrypte est : "<<motCrypt<<endl; // juste pour ne pas fermer la console cin >> valX; return 0; }
Bonjour, j'aurais utilisé un vecteur de int pour stocker les nombres, je ne sais pas si tu sais t'en servir. C'est pas très compliqué et ça a le même rôle qu'un tableau d'entier en C.
Ensuite j'aurais créé soit une classe soit une fonction du style :
La fonction retourne donc un vecteur de Int, il ne DOIT PAS contenir les tirets, tu utilises une autre fonction pour afficher proprement tout ça :
Normalement tu auras à un moment juste à écrire cette ligne :
Je te laisse réfléchir, si tu as besoin d'aide n'hésite pas :)
Bon courage !
J'aide les personnes qui ont un problème dans certaines sections du forums.
// Créer un vecteur de Int : Vector<int> motCrypte = new Vector<int>; // ajouter un nombre à la fin motCrypte->push_back(1); // Après moult push_back() // Accéder aux valeurs du vecteur : for(int i = 0 ; i < motCrypte.size() ; i++) { std::cout << "motCrypte[i] = " << motCrypte[i] << std::endl; // Tu peux utiliser la méthode at(i) également. }
Ensuite j'aurais créé soit une classe soit une fonction du style :
Vector<int> crypterMot(String mot, int clé);
La fonction retourne donc un vecteur de Int, il ne DOIT PAS contenir les tirets, tu utilises une autre fonction pour afficher proprement tout ça :
void afficherVecteur(Vector<Int> &unVecteur) { for(unsigned int i = 0 ; i < unVecteur.size() ; i++) { std::cout << unVecteur[i] << '-'; } std::cout << std::endl; }
Normalement tu auras à un moment juste à écrire cette ligne :
std::cout << "MOT INIT : " << motEntr << " -> cle : " << cle << " -> MOT CRYPT : "; afficherVecteur(crypterMot(motEntr, cle));
Je te laisse réfléchir, si tu as besoin d'aide n'hésite pas :)
Bon courage !
J'aide les personnes qui ont un problème dans certaines sections du forums.
Bonsoir,
Je vous remercie pour vos réponse ca m'aide beaucoup!
Je connaissais pas sstream! Ca me simplifie la vie.
Pour les tableaux dynamiques, je connais mais j'apprend à les utiliser en ce moment.
En fait, comme je disais je suis juste (et c'est deja bien) passionné par l'informatique et j'apprend avec des cours comme le sdz.
Mes études ne sont pas du tout en lien (agro et gestion).
Au passage connaissez-vous des formations d'1 an pour se perfectionner et (espérer) développer après? En C si possible.
Je vais lire tout le code et bien le comprendre.
Encore merci
Tibus
Je vous remercie pour vos réponse ca m'aide beaucoup!
Je connaissais pas sstream! Ca me simplifie la vie.
Pour les tableaux dynamiques, je connais mais j'apprend à les utiliser en ce moment.
En fait, comme je disais je suis juste (et c'est deja bien) passionné par l'informatique et j'apprend avec des cours comme le sdz.
Mes études ne sont pas du tout en lien (agro et gestion).
Au passage connaissez-vous des formations d'1 an pour se perfectionner et (espérer) développer après? En C si possible.
Je vais lire tout le code et bien le comprendre.
Encore merci
Tibus