我用c编写了这段代码以利用凯撒密码算法,但是,如果我输入更长的句子,它在末尾会给出奇怪的符号,例如,我在输出窗口中得到了这个:
输入文本:该程序是CAESAR CIPHER的示例
进入表格:ABCDEFGHIJKLMNOPQRSTUVWXYZ
输入密钥:3
WKLVBSURJUDPBLVBDQBH DPSOHBRIBFDHVDUBFLSKHUCä
您想将其解密吗?如果要输入1,请输入1
此程序是CAESAR CIPHER的一个示例。
按任意键继续 。 。 。
将不胜感激
void encrypt (char table[],char entext[],char text[],int key)
{
int i,j;
int k = strlen(table);
for (i=0;i<strlen(text);++i)
{
if (text[i]!='\0')
{
for (j=0; text[i] != table[j] ;j++);
entext[i] = table[(j+key)%k];
}
}
entext[i+1] = '\0';
puts(entext);
}
void decrypt (char table[],char detext[],char text[],int key)
{
int i,j;
int k = strlen(table);
for (i=0;i<strlen(text);++i)
{
if (text[i]!='\0')
{
for (j=0; text[i] != table[j] ;j++);
{
int temp = j - key;
if (temp < 0)
{
j = k + temp;
detext[i] = table[j];
}
else
detext[i] = table[j-key];
}
}
}
detext[i+1] = '\0';
puts(detext);
}
int main()
{
char table[100],text[100],entext[100],detext[100];
int i,j,key,choice;
printf("Enter the text : ");
gets(text);
printf("Enter the table : ");
gets(table);
printf("Enter the key : ");
scanf("%d",&key);
encrypt(table,entext,text,key);
printf("Do you want to decrypt it back? Enter 1 if you want to : ");
scanf("%d",&choice);
if (choice == 1)
{
decrypt(table,detext,entext,key);
}
system("pause");
return 0;
}
最佳答案
您将分号放在行尾,因此循环不执行任何操作
for (j=0; text[i] != table[j] ;j++);
如果在
text
中缺少table
中的符号(例如空格或'\n'
-换行符),则会出错。