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