凯撒密码 C 程序无法运行

标签 c encryption

我正在开发一个凯撒密码程序,它涉及将消息中的每个字母替换为字母表中后面固定数量位置的另一个字母。此外,它忽略数字和空格。但是,无论我尝试什么,程序都会立即终止。这是我到目前为止所拥有的;

#include <stdio.h>

char encrypt(char in, int key)
{
    while(in != '\n')
{
    if(in >= 'A' && in <= 'Z')
    {
        ((in-'A') + key) % 26 + 'A';
        printf("%s", in);
    }
        else if(in >= 'a' && in <= 'z')
    {
        ((in-'a') + key) % 26 + 'a';
        printf("%s", in);
    }
}
return 0;
}

int main()
{
int key;
String phrase;
char ch;

printf("Enter shift amount (1-25):\n");
scanf("%d ", &key);

printf("Enter message to be encrypted:\n");
scanf(
encrypt(in, key);
return 0;
}

最佳答案

问题很多。

主要问题是,您混淆了字符的加密和短语的加密。您应该将问题分解为几个子问题。

  • 问题 1:加密单个字符
  • 问题 2:加密短语,包括加密该短语的每个字符:

工作解决方案:

#include <stdio.h>

char encryptchar(char in, int key)
{
  if (in >= 'A' && in <= 'Z')
  {
      in = ((in-'A') + key) % 26 + 'A';
  }
  else if(in >= 'a' && in <= 'z')
  {
      in = ((in-'a') + key) % 26 + 'a';
  }

  return in;
}


void encryptphrase(char phrase[], int key)
{
  int i = 0;
  char c ;
  while (c = phrase[i])
  {
    c = encryptchar(c, key);
    phrase[i] = c;
    i++;
  }
}


int main()
{
  int key;
  char phrase[100];

  printf("Enter shift amount (1-25):\n");
  scanf("%d", &key);

  printf("Enter message to be encrypted:\n");
  scanf("%s", phrase);
  encryptphrase(phrase, key);
  printf("%s\n", phrase);
  return 0;
}

关于凯撒密码 C 程序无法运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26768508/

相关文章:

java - 演示如何使用 RSA 公钥系统来交换消息,以实现 secret 性和完整性/身份验证

c - 检测文件类型(常规文件、目录、符号链接(symbolic link)等)

ios - Objective C 中c 文件的共享实例?

c - 带有 int 指针的可变参数列表,未按预期工作

c - 从C套接字发送和接收数据的安全编码。我应该执行哪种检查?

.NET RSA 加密不适用于 OpenSSL

c - 记录动态内存分配使用情况

java rsa加密SSLSocket、android转java问题

c++ - Crypto API RSA 公钥可以解密数据,不是预期的不对称

encryption - 隐藏敏感信息的最简单方法