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

标签 c function encryption caesar-cipher

我对 C 编程语言完全陌生,所以不要对我的代码太挑剔。我找到了一些制作凯撒密码加密和解密程序的教程,我只想从CLI运行它。

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

  2. 我创建了加密代码,但无法解密,我理解主要思想,但因为我没有函数(我需要),所以我无法对代码进行解密部分。

请帮助我。这是我的代码:

#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 个函数,一个用于加密,另一个用于解密,我可以获得一些帮助吗?

谢谢。

最佳答案

您需要的功能类似于

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

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

关于C - 凯撒密码 [将代码移至函数],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47658389/

相关文章:

等效的 CryptProtectMemory 的 Linux

c - 如何将二进制文件读入C中的结构

c - 在 x 宏定义中使用宏作为参数

r - 编写成对 t 检验的函数

c++ - return后可以写语句吗?

function - Postgres 可以在部分索引 where 子句中使用函数吗?

javascript - Openpgp.js 无法解密 pgp 消息

c - 在同一语句中使用多个递增/递减

c - 读取已保存笔记的 FILEOBJECT

c - 为什么使用偏移密码加密后文件大小变小了?