添加然后在函数中减去这个数字的目的是什么?

时间:2014-11-20 02:53:40

标签: c++ encryption

这是我稍微修改过的代码,我想了解在我使用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;
}

1 个答案:

答案 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;