这是我稍微修改过的代码,我想了解在我使用Caesar密码的这段代码中添加和减去65的目的,这是加密函数(参见代码块)下面)。此外,我试图将65)+key
中的“+”替换为“ - ”来解密我刚刚加密的内容,但我最终得到的只是对已加密内容的另一种加密。
char caesar( char c )
{
if( isalpha(c) )
{
c = toupper(c); //use upper to keep from having to use two seperate for A..Z a..z
c = (((c+65)+key) % 26) - 65;
}
//if c isn't alpha, just send it back.
return c;
}
答案 0 :(得分:0)
65是'A'的ASCII码,所以如果你有一个带有大写字母的char
变量,你可以减去65得到字母'A'的0到25的值'Z'。
您发布的代码的+
和-
轮次错误,最终会在c
中显示负值。
代码应如下所示:
c = (((c-65)+key) % 26) + 65;
分解为这些步骤
(c - 65) // gives you a number between 0 and 25 for the letters 'A` to 'Z'
+ key // Add in the cipher offset
% 26 // Make sure that the value "wraps" back into 0-25 if key made it too big
+ 65 // Convert the number (0-25) back to an ASCII letter 'A' (65) to 'Z' (80)
要反转密码,你仍然需要做同样的事情(将'A' - 'Z'转换为0-25并返回等),只有这一次减去key
。那么问题是你减去密钥后可能会有一个负数,所以在这个值上加26可以将它带回范围。
这给出了
的解密代码c = (((c-65)-key+26) % 26) + 65;