2017-04-02 19 views
0

私は数週間前に暗号について学びました。私は、シーザー暗号を暗号化および復号化するツールを開発したいと考えています。しかし私が解読するとき、それはいつも奇妙な価値を返す。例: "私の最初のツール暗号"を暗号化した場合、 "zl svefg gbby pelcgb"は正しく復号化されませんが、 "m_ fiXYZ ZUUl cX_VZU"は13回回転するか、別の回転を選択します。シーザーは奇妙な値を解読しますか?

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

代わりに-13を+13に変更すると機能しますか? –

+0

はい、うまくいきます。しかしちょうど13回転!私は他の回転をしようとすると、別の奇妙な値に復帰します。 – Anvh

答えて

1

問題は、減算するときに負の値が得られることです。モジュロ演算子は、誤った結果を返します。値に常に追加する必要があります。

それを行うための適切な方法は次のとおりです。

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

これは、値が常に正であり、剰余は、あなたが期待するよう動作することを確認します。

+0

WOO HOO!ありがとう、ありがとう!私は紙でそれをテストすることは決してないので、レシピが負の値を返す可能性があるとは思わなかった。もう一度、ありがとう! – Anvh