Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1903 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Exercice de cryptographie? fichier cpp à complèter?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Exercice de cryptographie? fichier cpp à complèter?

n°1019291
Famitsu
Posté le 20-03-2005 à 20:25:49  profilanswer
 

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++ :o (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 :
  1. #include <cstdlib>
  2. #include <iostream>
  3. #include <string>
  4. using namespace std;
  5. // Conversion caractere (char) vers entier relatif (int)
  6. //
  7. int convCarToZ(char c)
  8. { return (int) ( c - ' ' ); }
  9. // Conversion entier relatif (int) vers caractere (char)
  10. //
  11. char convZToCar(int n)
  12. { return ((char) n) + ' '; }
  13. // Chiffrement XOR
  14. //
  15. // y = x ^ m (^ est le symbole C++ pour le OU EXCLUSIF)
  16. //
  17. // Entree : message a chiffrer
  18. // Sortie : resultat du chiffrement
  19. // Masque : masque binaire a appliquer a chaque caractere (1 octet = 8 bits)
  20. //
  21. // Amelioration possible : utiliser un masque binaire plus grand  
  22. //                         unsigned char Masque[4] par exemple
  23. //
  24. void chiffrementXOR(const string& Entree, string& Sortie, unsigned char Masque)
  25. {
  26. Sortie="";
  27. char caractere;
  28. for(int i=0;i<Entree.length();i++)
  29. {
  30.  caractere=Entree.at(i);
  31.  Sortie+=Masque ^ caractere;
  32. }
  33. }
  34. // Chiffrement par permutations
  35. //
  36. // y = p(m) avec p, permutation a 3 elements
  37. //
  38. // Entree : message a chiffrer
  39. // Sortie : resultat du chiffrement
  40. // P      : permutation a 3 elements
  41. //           
  42. //         exemple  (1, 2, 3) -> (3, 1, 2)
  43. //                   
  44. //                   P[0] = 1
  45. //                   P[1] = 2
  46. //                   P[2] = 0
  47. //
  48. // Amelioration possible : utiliser d'une permutation a n elements
  49. //                         n = 4, 5 ou plus.
  50. //
  51. void chiffrementPermutation(const string& Entree, string& Sortie,int n, int *P)
  52. {
  53. string nouvelle_string("" );
  54. int reste;
  55. Sortie=Entree;
  56. reste=Sortie.length();
  57. if(reste%n!=0)Sortie.append(reste%n,'_');
  58. reste=(Sortie.length())/n;
  59. for (int i=0;i<reste;i++)
  60. {
  61.  for (int j=0;j<n;j++)
  62.  {
  63.   nouvelle_string+=Sortie.at(P[j]);
  64.  }
  65.  Sortie=Sortie.substr(n,(Sortie.length()-n));
  66.  }
  67.  Sortie=nouvelle_string;
  68. }
  69. // Chiffrement par decalage
  70. //
  71. // y = x + d dans Z/95Z
  72. //
  73. // Entree : message a chiffrer
  74. // Sortie : resultat du chiffrement
  75. // d      : decalage, d est un element de Z/95Z
  76. // x   : code du caractère à chiffrer
  77. //
  78. void chiffrementDecalage(const string& Entree, string& Sortie, int d)
  79. {
  80. }
  81. // Chiffrement affine
  82. //
  83. // y = a*x + b dans Z/95Z
  84. //
  85. // Entree : message a chiffrer
  86. // Sortie : resultat du chiffrement
  87. // a, b   : elements de Z/95Z
  88. //
  89. void chiffrementAffine(const string& Entree, string& Sortie, int a, int b)
  90. {
  91. }
  92. // Dechiffrement affine
  93. //
  94. // y = inva*(x + invb) dans Z/95Z
  95. //
  96. // Entree : message a chiffrer
  97. // Sortie : resultat du chiffrement
  98. // a, b   : elements de Z/95Z
  99. //
  100. void dechiffrementAffine(const string& Entree, string& Sortie, int inva, int invb)
  101. {
  102. }
  103. //
  104. // Heuristiques
  105. //
  106. // Parametre :
  107. //    Message : texte a etudier
  108. //
  109. // Valeur retournee : note attribuee au message apres analyse
  110. unsigned int heuristique1(const string& Message)
  111. {
  112. // ???
  113. return 0;
  114. }
  115. int main()
  116. {
  117. string src("Beau temps pour un lundi hi" ), dest;
  118. cout << "Message clair : " << src << endl;
  119. chiffrementXOR(src, dest, 12);
  120. cout << "Message chiffre : " << dest << endl;
  121. chiffrementXOR(dest, src, 12);
  122. cout << "Message clair : " << src << endl;
  123. int n=4;
  124. int P[4]={3,1,0,2};
  125. chiffrementPermutation(src, dest,n,P);
  126. cout << "Message chiffre par permutation :"<<dest<<endl;
  127. return EXIT_SUCCESS;
  128. }


 
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 :sweat:  
 
Kiss
Famitsu

mood
Publicité
Posté le 20-03-2005 à 20:25:49  profilanswer
 

n°1019549
jagstang
Pa Capona ಠ_ಠ
Posté le 21-03-2005 à 10:09:17  profilanswer
 

heuristique sans plus de précision on peut pas deviner..

n°1019550
jagstang
Pa Capona ಠ_ಠ
Posté le 21-03-2005 à 10:15:36  profilanswer
 

quoi que dans ton cas, la méthode heuristique pourrait être tester tout tes algo de décryptage [:jagstang]

n°1019619
CMk
Posté le 21-03-2005 à 11:39:16  profilanswer
 

L'heuristique ? Tu peux nous expliquer le principe?

n°1020731
Famitsu
Posté le 22-03-2005 à 10:39:17  profilanswer
 

En fait heuristique, si j'ai bien compris permet d'étudier le texte en éliminant les mots qui ne peuvent pas former un mot
par exemple, en français le mot le plus long est 25, donc on élimine les autres possibilités
les mots composés de "aa" (2 A se suivant) n'existent pas, etc...
 
j'espère que c'est un peu plus clair :o

n°1020766
Famitsu
Posté le 22-03-2005 à 11:11:49  profilanswer
 

Voilà ce que j'ai trouvé, si ça peut aider à clarifier la fonction heuristique  :)  

Code :
  1. //
  2. // Heuristiques
  3. //
  4. // Parametre :
  5. //    Message : texte a etudier
  6. //
  7. // Valeur retournee : note attribuee au message apres analyse
  8. unsigned int heuristique1(const string& Message)
  9. {
  10. int heur=0;
  11. int p(0),q(0),r(0),s(0),pi(0),qi(0),ri(0),si(0);
  12. char c(' ');
  13. bool compteur=false;
  14. p=Message.find_first_of(c,p);
  15. while(p>-1 && p<25)
  16.  {
  17.   if(pi==24) pi++;
  18.   p=Message.find_first_of(c,p);
  19.   compteur=true;
  20.  }
  21. if(pi>2) heur=0;
  22. else
  23. {
  24.  if(compteur==false) heur=0;
  25.  else
  26.   {
  27.    p=0;pi=0;
  28.   p=Message.find_first_of('e',p);
  29.   while(p!=-1 )
  30.   {
  31.    p=Message.find_first_of(c,p);
  32.    pi++;
  33.   }
  34.   if(Message.length()*0.14>pi) heur++;
  35.   p=0;pi=0;
  36.   p=Message.find_first_of('a',p);
  37.   q=Message.find_first_of('o',q);
  38.   r=Message.find_first_of('u',r);
  39.   s=Message.find_first_of('i',s);
  40.   while(p!=-1 )
  41.   {
  42.    pi=p;qi=q;ri=r;si=s;
  43.    p=Message.find_first_of('a',p);
  44.    q=Message.find_first_of('o',q);
  45.    r=Message.find_first_of('u',r);
  46.    s=Message.find_first_of('i',s);
  47.    (p==pi+1)? heur-- : heur++;
  48.   }
  49.   p=0;pi=0;q=0;
  50.   for(int n=32;n<48;n++)
  51.   {
  52.    c=convZToCar(n);
  53.    p=Message.find_first_of(c,p);
  54.    pi=Message.find_first_of(c,p);
  55.    q=Message.find_first_of(c,pi);
  56.    if (pi==p+1)
  57.    {
  58.     heur--;
  59.     if(q=pi+1) heur--;
  60.    }
  61.    p=0;
  62.   }
  63.  }
  64. }
  65. return heur;
  66. }


Message édité par Famitsu le 22-03-2005 à 11:13:13
n°1022415
Famitsu
Posté le 23-03-2005 à 16:17:10  profilanswer
 

Personne? :??:

n°1022992
jagstang
Pa Capona ಠ_ಠ
Posté le 24-03-2005 à 08:53:21  profilanswer
 

ça clarifie pas grand chose. c'est quoi cette horreur ?
 
que fait cette fct heuristique en quelques mots ?
 
note : les commentaires sont aussi important que le code

n°1027045
dreamkille​r
Posté le 28-03-2005 à 01:13:01  profilanswer
 

jagstang a écrit :


note : les commentaires sont aussi important que le code


 
C'est ce que me dise mes prof mais c'est plus simple a dire qu'a faire (sourton quand on est sur notre propre code qui n'as pas besoin en theorie d'etre relue par quelqu'un d'autre)

n°1027093
jagstang
Pa Capona ಠ_ಠ
Posté le 28-03-2005 à 03:04:36  profilanswer
 

sache que dans 2 mois c'est toi-même qui sera incapable de le relire. alors il faut toujours coder "comme si on était pas tout seul"


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
mood
Publicité
Posté le 28-03-2005 à 03:04:36  profilanswer
 

n°1027108
blastman
just me !
Posté le 28-03-2005 à 03:52:37  profilanswer
 

jagstang a écrit :

sache que dans 2 mois c'est toi-même qui sera incapable de le relire. alors il faut toujours coder "comme si on était pas tout seul"


 
+1


---------------
http://www.blastmanu.info
n°1027129
Joel F
Real men use unique_ptr
Posté le 28-03-2005 à 10:00:41  profilanswer
 

et je croyais que la resolution d'exo était hors chartre :o


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Exercice de cryptographie? fichier cpp à complèter?

 

Sujets relatifs
[Résolu] executer un fichier et afficher le résultatCopier un fichier en C
Comment lire un fichier aps...??Lire un fichier PDF
modifier des données dans un fichier de données en perl?c fichier
ne pas ouvrir un fichier doc dans iefichier en lecture/ecriture
transformer un fichier de données en tableau[PHP] envoie fichier pb
Plus de sujets relatifs à : Exercice de cryptographie? fichier cpp à complèter?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR