凯撒解密怪异值?
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;
这将确保值始终为正并且模数按预期工作。
我几周前刚学过密码学。我想开发我的工具来加密和解密凯撒密码。但是当我解密时,它总是 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;
这将确保值始终为正并且模数按预期工作。