C# 凯撒解密奇怪的值?

C# 凯撒解密奇怪的值?,c#,encryption,cryptography,caesar-cipher,C#,Encryption,Cryptography,Caesar Cipher,我几周前才了解了密码学。我想开发我的工具来加密和解密凯撒密码。但当我解密时,它总是返回奇怪的值。示例:如果我加密我的第一个工具crypto,它不会返回right decrypt zl svefg gbby pelcgb,而是使用rotate 13或我选择的另一个rotate对m_yzzuul cX_VZU进行解密 string array1 = "zl svefg gbby pelcgb"; int t2 = 0; foreach (char c in array

我几周前才了解了密码学。我想开发我的工具来加密和解密凯撒密码。但当我解密时,它总是返回奇怪的值。示例:如果我加密我的第一个工具crypto,它不会返回right decrypt zl svefg gbby pelcgb,而是使用rotate 13或我选择的另一个rotate对m_yzzuul cX_VZU进行解密

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;

这将确保值始终为正值,并且模的工作方式与预期一致。

如果将-13改为+13,它是否有效?是的,它有效。但只需旋转13次!!!当我尝试其他旋转时,它会返回到另一个奇怪的值。呜呼!非常感谢您,先生!我从来没有在纸上测试过,所以我没有意识到我的配方可能会返回负值。再次感谢您,先生!