凯撒密码算法转移C.

时间:2014-03-08 13:16:20

标签: c algorithm encryption

所以我正在编写一个C程序,使用自定义表格来使用凯撒算法,我将使用该表格进行表格移动,例如根据表格“abc”使用key = abc的文本“abc” 1应该被加密为bca,但是如果key + index of letter高于这里存储的表的长度是我的代码,那么我在最后的字符上有困难

void encrypt (char table[],char entext[],char text[],int key)

{


     int i,j;

     int k = strlen(table);

     //int result = (key + k);
     for (i=0;i<strlen(table);++i)
     {
         j = 0;
         if (text[i]!='\0')
         {
             while (text[i]!=table[j])
             {
                   j++;
             }
             if ((j+key)>k)
             {
                j=(j+key)%k;
                //j = (result - j);
             }
             else
                 j = j + key;

             entext[i] = table[j];
         }
     }
     entext[i+1] = '\0';
     puts(entext);
}

int main()

{    

    char table[100] , text[100] , entext[100] , c;

    int i , j , key;
    printf("Enter the text : ");
    gets(text);
    printf("Enter the table : ");
    gets(table);
    printf("Enter the key : ");
    scanf("%d",&key);
    encrypt(table,entext,text,key);
    system("pause");
    return 0;

}

2 个答案:

答案 0 :(得分:0)

if ((j+key)>k)

应该是

if ((j+key)>=k)

此外,由于mod的工作方式,这项检查完全没有必要。我将冒昧地重写你的代码,使它看起来更好:

void encrypt (char table[],char entext[],char text[],int key)
{
     int i,j;
     int k = strlen(table);

     //int result = (key + k);
     for (i=0;i<strlen(table);++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);
}

我相信你可以通过索引char本身的值来使这个“表”查找更有效率,但除非你处理相当大的输入,否则这不会产生任何影响。

答案 1 :(得分:0)

void encrypt (char table[], char entext[], char text[], int key) {
    int i,j;
    int k = strlen(table);

    for (i=0;text[i];++i){
        for(j=0;table[j] && text[i]!=table[j];++j)
            ;
        if(table[j]=='\0')//character not find at table
            entext[i] = text[i];//Not slide. // or Error?
        else {
            j += key;
            if(j>=k)
                j -= k;//j = j % k
            entext[i] = table[j];
        }
    }
    entext[i] = '\0';
    puts(entext);
}