我在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;
}
如果你能帮助我,那就太棒了
感谢您的时间。
答案 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;//?
}