2017-04-02 88 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