C - 凯撒密码[将代码移动到函数]

时间:2017-12-05 16:32:43

标签: c function encryption caesar-cipher

我对C编程语言完全不熟悉,所以不要过于批评我的代码。我找到了一些制作Caesar Cipher加密和解密程序的教程,我只是想从CLI运行它。

  1. 我有代码,但它使用全局变量并且不使用函数,我需要它们两者,我需要以某种方式将我的代码移动到称为“加密”的函数和另一个称为“解密”的函数,这个一切都转到问题2

  2. 我创建了加密代码,但我不能解密,我理解主要的想法,但因为我没有功能(我需要)我无法使解密部分代码。

  3. 请帮帮我。这是我的代码:

    #include<stdio.h>
    
    int main()
    {
        char message[100], symbol;
        int i, key;
    
        printf("Message to encrypt: ");
        gets(message); //fgets is better
        printf("Enter key: ");
        scanf("%d", &key);
    
        for(i = 0; message[i] != '\0'; ++i){
            symbol = message[i];
    
            if(symbol >= 'a' && symbol <= 'z'){
                symbol = symbol + key;
    
                if(symbol > 'z'){
                    symbol = symbol - 'z' + 'a' - 1;
                }
    
                message[i] = symbol;
            }
            else if(symbol >= 'A' && symbol <= 'Z'){
                symbol = symbol + key;
    
                if(symbol > 'Z'){
                    symbol = symbol - 'Z' + 'A' - 1;
                }
    
                message[i] = symbol;
            }
            else if(symbol >= '0' && symbol <= '9'){
                symbol = symbol + key;
    
                if(symbol > '9'){
                    symbol = symbol - '9' + '1' - 1;    
                }
    
                message[i] = symbol;
            }
        }
    
        printf("Encrypted message: %s", message);
    
        return 0;
    }
    

    正如我所说,我需要制作2个功能,一个用于加密,另一个用于解密,我能得到一些帮助吗?

    谢谢。

2 个答案:

答案 0 :(得分:2)

您需要的功能类似于

void encryption(char message[100], char encrypted[100], int key)

您可以复制粘贴代码,例如:

void encryption(char message[100], char encrypted[100], int key){
   // declare variables here
   for(i = 0; message[i] != '\0'; ++i){
    symbol = message[i];

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

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

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

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

        encrypted[i] = symbol;
    }
    else if(symbol >= '0' && symbol <= '9'){
        symbol = symbol + key;

        if(symbol > '9'){
            symbol = symbol - '9' + '1' - 1;    
        }

        encrypted[i] = symbol;
    }
  }
}

你不必创建一个名为encrypted []的数组,但由于你以后可能需要你的原始消息[](例如,检查你的解码是否正确),我建议不要覆盖它。

答案 1 :(得分:1)

加密功能

char * encryption(char * message,  int key)
{
  char * encrypted_message= (char *)malloc( (strlen(message)+1)*sizeof(char)); //create a new message that has the length of the original message + 1 space for the null character ('\0')

 //do the encryption

 return encrypted_message;
  //or make it void and print it the enc. msg. or both
}

您还可以包含string.h lib并使用strlen()函数来获取字符串的长度。