1

ヴィジュネル暗号のプログラムを書いています。しかし、プレーンテキストの最後までキーを繰り返す方法がわかりません。現在、私のコードは、キーの文字数に相当する文字のみを暗号化しています。たとえば、「dog」のキーを入力し、プレーンテキストが「catdog」の場合、「fozdyw」の暗号化されたテキストが表示されます。これは、最初の3文字のみを暗号化することを意味します。

これは、暗号化を行う私のコードの一部です。

for (int j=0, k=0; j < strlen(text); j++, k++)
      {         
        if((text[j] >= 'A') && (text[j] <= 'Z'))
            text[j] = ((text[j] -'A') + key[k]) % 26 +'A';

        if((text[j] >= 'a') && (text[j] <= 'z'))
            text[j] = ((text[j] -'a') + key[k]) % 26 +'a';

        printf("%c", text[j]); 
      }  

私は何が間違っているのですか?そして、何をするのが正しいのでしょうか?

4

2 に答える 2

2

キーの最後に到達したら、インデックス0に戻ります。これは、キーのサイズ(AKAモジュラス)による除算の余りを使用して行われます。

  for (int j=0, k=0; j < strlen(text); j++, k++)
  {         
    if((text[j] >= 'A') && (text[j] <= 'Z'))
        text[j] = ((text[j] -'A') + key[k % size_of_the_key]) % 26 +'A';

    if((text[j] >= 'a') && (text[j] <= 'z'))
        text[j] = ((text[j] -'a') + key[k % size_of_the_key]) % 26 +'a';

    printf("%c", text[j]); 
  }  
于 2012-12-02T04:42:22.703 に答える
0

アスキーテーブルはそのための良いリファレンスです。つまり、シンボルが暗号化されるのを防ぎます。正確には、特定の範囲の文字を処理するように努めてください。たとえば、大文字の場合は65〜90で、それ以外の場合はそのプログラムを終了します。

于 2013-05-09T08:57:46.843 に答える