2017-04-02 2 views
0

Je viens d'apprendre la cryptographie il y a quelques semaines. Je veux développer mon outil pour crypter et décrypter le chiffrement Caesar. Mais quand je décrypte, il retourne toujours une valeur bizarre. Exemple: si je crypte "mon premier chiffrement d'outil", il ne revient pas à droite décrypter "zl svefg gbby pelcgb", mais "m_ fiXYZ ZUUl cX_VZU" avec une rotation 13 ou une autre rotation que j'ai choisie.César décrypte une valeur étrange?

string array1 = "zl svefg gbby pelcgb"; 
     int t2 = 0; 
     foreach (char c in array1) 
     { 
      if ((int)c == 32 || ((int)c >= 48 && (int)c <= 57)) 
       t2 = c; 
      else 
       t2 = ((((int)c - 97) - 13) % 26) + 97; 
      Console.Write((char)t2); 
     } 
+0

Est-ce que cela fonctionne si vous changez plutôt de -13 à +13? –

+0

Oui, ça marche. Mais juste tourner seulement 13 !!! Quand j'essaie d'autres rotations, ça revient à une autre valeur bizarre. – Anvh

Répondre

1

Le problème est que lorsque vous faites de la soustraction, vous obtenez des valeurs négatives. L'opérateur modulo donnera alors des résultats erronés. Vous devez toujours ajouter à la valeur.

La bonne façon de le faire est la suivante:

t2 = ((((int)c - 97) - 13 + 26) % 26) + 97; 

Cela fera en sorte que les valeurs sont toujours positives et le modulo fonctionne comme prévu.

+0

WOO HOO! Merci beaucoup monsieur! Je ne l'ai jamais testé sur papier et je n'ai pas réalisé que ma recette pouvait retourner des valeurs négatives. Encore une fois, merci, monsieur! – Anvh