凯撒解密怪异值?

Caesar decrypt weird value?

我几周前刚学过密码学。我想开发我的工具来加密和解密凯撒密码。但是当我解密时,它总是 return 奇怪的值。示例:如果我加密 "my first tool crypto",它不是 return 正确解密 "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);
        }

问题是当你做减法时你会得到负值。模运算符将给出错误的结果。您需要始终增加价值。

正确的做法是:

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

这将确保值始终为正并且模数按预期工作。