Caesar Cipher C程序未正确加密

时间:2014-03-19 22:32:44

标签: c unix encryption

我在C上为我的班级编写了一个Caesar Cipher程序,它似乎没有正确加密。 该程序从一句话“懒散的狗的快速布朗狐狸笑”输入 并使用Caesar Cipher方法从键盘输入中获取加密值对其进行加密。 当它加密它时,它没有正确地执行它,并且它将其解密为废话。我查看了它,无法弄清楚我搞砸了为什么它没有以正确的方式加密句子。

以下是代码:

#include <stdio.h>
#include <stdlib.h>


int  Caesar_encrypt(char *p, char *s, int enckey);
int  Caesar_decrypt(char *p, char *s, int enckey);

int main(void){
  char A[]="THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG";
  char B[50], /* stores encrypted output string  */
  C[50];  /* stores decrypted output using string B as source */
  int enckey,
  statuse, statusd; /* they store return values from the functions */

  printf("Plaintext for encryption is : %s \n", A);

  printf("Input numerical key for Caesar's cypher : ");
  scanf("%d",&enckey);
  putchar('\n');
  printf("You entered encryption key %d \n", enckey);

  /* encrypt by Caesar's cypher */
  statuse= Caesar_encrypt( A, B, enckey);

  printf("Ciphertext is : %s \n", B);

 /* decrypt by Caesar's cypher */
  statusd = Caesar_decrypt( B, C, enckey);
  printf("Decrypted text is: %s \n", C); 


  exit (0);
}

int  Caesar_encrypt(char *p, char *s, int enckey){
    *s = ((*p + enckey)%26) + 65 ;
    return 0;
}

int Caesar_decrypt(char *p, char *s, int enckey){
    *s = ((*p - enckey)%26) + 65 ;
    return 0;
}

如果你能帮助我,那就太棒了

感谢您的时间。

2 个答案:

答案 0 :(得分:2)

您正在/仅解密字符串的第一个字符。您必须遍历字符串的所有字符。

并且SPACE字符的加密/解密存在问题。我把这作为练习留给你。

答案 1 :(得分:0)

#include <ctype.h>

int  Caesar_encrypt(char *p, char *s, int enckey){
    for(; *p ; ++s, ++p){
        *s = isupper(*p) ? (*p - 'A' + enckey)%26 + 'A' : *p;
    }
    *s = '\0';
    return 0;//?
}

int Caesar_decrypt(char *p, char *s, int enckey){
    for(; *p ; ++s, ++p){
        *s = isupper(*p) ? (*p - 'A' + (26-enckey))%26 + 'A' : *p;
    }
    *s = '\0';
    return 0;//?
}