有人可以帮我解释一下这段代码

时间:2017-12-29 19:41:04

标签: c cryptography char caesar-cipher

我在网上发现了这个凯撒密码加密代码,我试图了解它是如何工作的

#include<stdio.h>

int main()
{
char message[100], ch;
int i, key;

printf("Enter a message to encrypt: ");
gets(message);
printf("Enter key: ");
scanf("%d", &key);

for(i = 0; message[i] != '\0'; ++i){
    ch = message[i];

    if(ch >= 'a' && ch <= 'z'){
        ch = ch + key;

        if(ch > 'z'){
            ch = ch - 'z' + 'a' - 1;
        }

        message[i] = ch;
    }
    else if(ch >= 'A' && ch <= 'Z'){
        ch = ch + key;

        if(ch > 'Z'){
            ch = ch - 'Z' + 'A' - 1;
        }

        message[i] = ch;
    }
}

printf("Encrypted message: %s", message);

return 0;
}
  • if(ch >= 'a' && ch <= 'z')的含义 就像c包括字母作为一个数组或什么或它如何知道该字母是b或其他?

  • 将int添加到ch = ch + key;

  • 中的char
  • 这个数学事物ch = ch - 'Z' + 'A' - 1;

非常感谢

1 个答案:

答案 0 :(得分:0)

代码会为每个输入的字符添加一定的值(key),并在a-z范围内“旋转”该字符,如果是大型上限,则A-Z如果是大上限。

在C中,每个单个字符都有一个隐式ascii/int值,比较运算符用于判断输入的字符是否在字符集a-z中(彼此对齐)或者是否它位于A-Z的集合中,它们也跟在一起。

如果输入的字符加上key“超过”f.e,其余代码将处理环绕。 zZ并通过减去'z'的值并添加'a' -1的值来循环它,以便生成的char再次位于{{{{}}的选定范围内1}}或a-z