Posted By

thomn on 10/02/13


Tagged


Versions (?)

Cryptage


 / Published in: C#
 

Algorithme simple de cryptage

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace cryptageMiamPlusBon
  8. {
  9. class Program
  10. {
  11. static void Main(string[] args)
  12. {
  13. string texte = "TAGADA";
  14. string clef = "POUETPOUET";
  15. string texteCrypte;
  16. string texteDecrypte;
  17.  
  18. texteCrypte = Cryptage(texte, clef);
  19. Console.WriteLine("Cryptage :\n"+
  20. "'{0}' associé à la clef '{1}' donne '{2}'.\n", texte, clef, texteCrypte);
  21.  
  22. texteDecrypte = Decryptage(texteCrypte, clef);
  23. Console.WriteLine("Decryptage :\n"+
  24. "'{0}' associé à la clef '{1}' donne '{2}'.\n", texteCrypte, clef, texteDecrypte);
  25.  
  26. Console.ReadLine();
  27. }
  28.  
  29. static string Cryptage(string texte, string clef)
  30. {
  31. // Ce tableau servira à recueillir les caractères du texte crypté
  32. char[] texteCrypteTab = new char[texte.Length];
  33.  
  34. // Même longueur pour le texte et la clef
  35. clef = AdapterClef(clef, texte.Length);
  36.  
  37. // On associe les caractères du texte et de la clef
  38. for (int i = 0; i < texte.Length; i++)
  39. {
  40. texteCrypteTab[i] = AssocierCaracteres(texte[i], clef[i]);
  41. }
  42.  
  43. // On retourne les éléments concaténés du tableau de char
  44. return TableauEnString(texteCrypteTab);
  45. }
  46.  
  47. static string Decryptage(string texteCrypte, string clef)
  48. {
  49. // Ce tableau servira à recueillir les caractères du texte décrypté
  50. char[] texteDecrypteTab = new char[texteCrypte.Length];
  51.  
  52. // Même longueur pour le texte et la clef
  53. clef = AdapterClef(clef, texteCrypte.Length);
  54.  
  55. // On 'désassocie' les caractères du texte et de la clef
  56. for (int i = 0; i < texteCrypte.Length; i++)
  57. {
  58. texteDecrypteTab[i] = DesassocierCaracteres(texteCrypte[i], clef[i]);
  59. }
  60.  
  61. // On retourne les éléments concaténés du tableau de char
  62. return TableauEnString(texteDecrypteTab);
  63. }
  64.  
  65. static string AdapterClef(string clef, int taille)
  66. {
  67. char[] clefTab = clef.ToArray();
  68. char[] clefAdapteeTab = new char[taille];
  69. string clefAdaptee;
  70.  
  71. // Ceci permet par exemple d'obtenir CLEFCLE à  partir de CLEF si la longueur spécifiée est 7
  72. for (int i = 0; i < taille; i++)
  73. {
  74. clefAdapteeTab[i] = clefTab[i % (clefTab.Length)];
  75. }
  76.  
  77. // On transforme le tableau de char en string
  78. clefAdaptee = TableauEnString(clefAdapteeTab);
  79.  
  80. return clefAdaptee;
  81. }
  82.  
  83. static char AssocierCaracteres(char texte, char clef)
  84. {
  85. string alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  86.  
  87. // Une lettre peut avoir la valeur d'index k, ou k + 26.
  88. // On additionne les valeurs d'index, et on fait le modulo 26, puisque k % 26 = (k + 26) % 26.
  89. int caractereCodeIndex = (alphabet.IndexOf(clef) + alphabet.IndexOf(texte)) % 26;
  90. char caractereCode = alphabet[caractereCodeIndex];
  91. return caractereCode;
  92. }
  93.  
  94. static char DesassocierCaracteres(char texteCrypte, char clef)
  95. {
  96. string alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  97. int caractereDecodeIndex = ((alphabet.IndexOf(texteCrypte) + 26) - alphabet.IndexOf(clef)) % 26;
  98. char caractereDecode = alphabet[caractereDecodeIndex];
  99. return caractereDecode;
  100. }
  101.  
  102. static string TableauEnString(char[] tableau)
  103. {
  104. string texte = "";
  105. for (int i = 0; i < tableau.Length; i++)
  106. {
  107. texte = texte + tableau[i];
  108. }
  109. return texte;
  110. }
  111.  
  112. }
  113. }

Report this snippet  

You need to login to post a comment.