Famitsu | Bonjour
Sur le site d'une université française, j'ai trouvé un petit programme en C++ (sans trouver la correction).
Ayant très peu de connaissances en C++, pas vraiment encore de cours sur le sujet,
je fais appel aux plus chevronnés de la POO en C++
le but est surtout de m'aider sur un exercice de maths et la cryptographie
je sais compiler le fichier, mais je bloque sur l'algo à réaliser en C++ (pas assez de connaissances pour le faire)
Voilà l'intégralité du fichier, qui pour le moment ressort le message (mis en paramètre) clair puis crypté puis clair.
fichier: crypto.cpp
Code :
- #include <cstdlib>
- #include <iostream>
- #include <string>
- using namespace std;
- // Conversion caractere (char) vers entier relatif (int)
- //
- int convCarToZ(char c)
- { return (int) ( c - ' ' ); }
- // Conversion entier relatif (int) vers caractere (char)
- //
- char convZToCar(int n)
- { return ((char) n) + ' '; }
- // Chiffrement XOR
- //
- // y = x ^ m (^ est le symbole C++ pour le OU EXCLUSIF)
- //
- // Entree : message a chiffrer
- // Sortie : resultat du chiffrement
- // Masque : masque binaire a appliquer a chaque caractere (1 octet = 8 bits)
- //
- // Amelioration possible : utiliser un masque binaire plus grand
- // unsigned char Masque[4] par exemple
- //
- void chiffrementXOR(const string& Entree, string& Sortie, unsigned char Masque)
- {
- Sortie="";
- char caractere;
- for(int i=0;i<Entree.length();i++)
- {
- caractere=Entree.at(i);
- Sortie+=Masque ^ caractere;
- }
- }
- // Chiffrement par permutations
- //
- // y = p(m) avec p, permutation a 3 elements
- //
- // Entree : message a chiffrer
- // Sortie : resultat du chiffrement
- // P : permutation a 3 elements
- //
- // exemple (1, 2, 3) -> (3, 1, 2)
- //
- // P[0] = 1
- // P[1] = 2
- // P[2] = 0
- //
- // Amelioration possible : utiliser d'une permutation a n elements
- // n = 4, 5 ou plus.
- //
- void chiffrementPermutation(const string& Entree, string& Sortie,int n, int *P)
- {
- string nouvelle_string("" );
- int reste;
- Sortie=Entree;
- reste=Sortie.length();
- if(reste%n!=0)Sortie.append(reste%n,'_');
- reste=(Sortie.length())/n;
- for (int i=0;i<reste;i++)
- {
- for (int j=0;j<n;j++)
- {
- nouvelle_string+=Sortie.at(P[j]);
- }
- Sortie=Sortie.substr(n,(Sortie.length()-n));
- }
- Sortie=nouvelle_string;
- }
- // Chiffrement par decalage
- //
- // y = x + d dans Z/95Z
- //
- // Entree : message a chiffrer
- // Sortie : resultat du chiffrement
- // d : decalage, d est un element de Z/95Z
- // x : code du caractère à chiffrer
- //
- void chiffrementDecalage(const string& Entree, string& Sortie, int d)
- {
- }
- // Chiffrement affine
- //
- // y = a*x + b dans Z/95Z
- //
- // Entree : message a chiffrer
- // Sortie : resultat du chiffrement
- // a, b : elements de Z/95Z
- //
- void chiffrementAffine(const string& Entree, string& Sortie, int a, int b)
- {
- }
- // Dechiffrement affine
- //
- // y = inva*(x + invb) dans Z/95Z
- //
- // Entree : message a chiffrer
- // Sortie : resultat du chiffrement
- // a, b : elements de Z/95Z
- //
- void dechiffrementAffine(const string& Entree, string& Sortie, int inva, int invb)
- {
- }
- //
- // Heuristiques
- //
- // Parametre :
- // Message : texte a etudier
- //
- // Valeur retournee : note attribuee au message apres analyse
- unsigned int heuristique1(const string& Message)
- {
- // ???
- return 0;
- }
- int main()
- {
- string src("Beau temps pour un lundi hi" ), dest;
- cout << "Message clair : " << src << endl;
- chiffrementXOR(src, dest, 12);
- cout << "Message chiffre : " << dest << endl;
- chiffrementXOR(dest, src, 12);
- cout << "Message clair : " << src << endl;
- int n=4;
- int P[4]={3,1,0,2};
- chiffrementPermutation(src, dest,n,P);
- cout << "Message chiffre par permutation :"<<dest<<endl;
- return EXIT_SUCCESS;
- }
|
C'est surtout la partie "Heuristiques" qui m'intéresse
Donc un grand merci d'avance à ceux qui saurront m'aider en complètant les trous des fonctions à faire:
- chiffrementDecalage
- chiffrementAffine
- dechiffrementAffine
- heuristique1 (prioritaire)
Merci d'avance pour le temps que vous prendrez pour m'aider Kiss
Famitsu |