【问题标题】:Caesar decrypt weird value?凯撒解密怪值?
【发布时间】:2017-04-02 16:01:57
【问题描述】:

我几周前刚刚学习了密码学。我想开发我的工具来加密和解密凯撒密码。但是当我解密时,它总是返回奇怪的值。示例:如果我加密“我的第一个工具加密”,它不会返回正确的解密“zl svefg gbby pelcgb”,而是使用旋转 13 或我选择的其他旋转返回“m_ fiXYZ ZUUl 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);
        }

【问题讨论】:

  • 将-13改为+13是否有效?
  • 是的,它有效。但只旋转 13 次!!!当我尝试其他一些旋转时,它又回到了另一个奇怪的值。

标签: c# encryption cryptography caesar-cipher


【解决方案1】:

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

正确的做法是:

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

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

【讨论】:

  • 呜呼!非常感谢您,先生!我从来没有在纸上测试过,所以没有意识到我的食谱会返回负值。再次感谢您,先生!
猜你喜欢
  • 2013-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-30
  • 2012-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多