C 有人能给我解释一下这个代码吗

C 有人能给我解释一下这个代码吗,c,cryptography,char,caesar-cipher,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 = me

我在网上找到了这个凯撒密码,我想了解它是如何工作的

#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;
}

ifch的含义>='a'&&ch代码为每个输入的字符添加一个特定的值键,并在a-z范围内旋转字符(如果是小大写字母),在a-z范围内旋转字符(如果是大大写字母)

在C语言中,每个字符都有一个隐式ascii/int值,比较运算符用于确定输入的字符是在相互对齐的字符a-z集中,还是在相互紧随的字符a-z集中


如果输入的字符加上键超出了f.e.z或z,代码的其余部分将处理环绕,并通过减去“z”的值并加上“a'-1”的值来循环它,这样得到的字符再次是a-z或a-z的选定范围内的字符你提到的角色中的一个。C…知道字母是…?不,是编译器用于的字符编码定义了字符编码的值。C语言没有这样的要求,因为它是为在不同的系统上实现而设计的。由于您的程序使用字符文字[按执行字符集编码],因此您希望/确保控制台/终端的区域设置/chcp与scanf使用的C区域设置对齐。您的C运行时可能检测到控制台扫描,您解释了从a中减去1或从ch z中减去1的过程ch@user8408288依次检查消息的每个字符。字符有一个隐式整数值,请参见A is 97,z是122-如果你的密钥是50,如果你的消息是abcd,它被加密为'a'+50=97+50=147,这比'z'的122大,所以你可以-147-122+97-1=25+97-1=121='y'表示bcd的etc。很抱歉打扰你,为什么-1不能说25+97?@user8408288,因为你的密码中会有硬代码值不是nesseccary-C的源代码理解'a'+50-'z'+a'-1没有任何问题。硬编码这些值可能看起来更简单,但随后您会失去这背后的联系。什么是‘a’+50-122+97-1,为什么要这样做?6个月后有点难记……哦,谢谢你的帮助