2017-03-09 6 views
-1

私はプログラムを作ろうとしました。それはビジェーレの暗号を使っていました。すべての3番目の文字は間違っています。誰かが私にヒントを与えることができますか?お手伝いありがとう。ビジェーレの暗号を使ってメッセージを暗号化するプログラムを実装すると、C

#include <stdio.h> 
#include <cs50.h> 
#include <string.h> 
#include <stdlib.h> 
#include <ctype.h> 


int main(int argc, string argv[]) 
{ 

int n = 0; 
int j = 0; 
int p; 
int l; 
int x = 0; 


if(argc != 2) 
{ 
    printf("missing command-line argument\n"); 
    return 1; 
} else 
{ 
    printf("plaintext: "); 
}  

string text = get_string(); 
string key = (argv[1]); 

printf("ciphertext: "); 


for (j = 0, x = 0, n = strlen(text); j < n; j++) 
{ 

    p = (((text[j] - 65) + ((key[x] - 65) % strlen(key))) % 26) + 65; 
    l = (((text[j] - 97) + ((key[x] - 97) % strlen(key))) % 26) + 97; 

if(isalpha(text[j])) 
{ 
    if(isupper (text[j])) 
    { 
    printf("%c", p); 
    x++; 
    } 
    if(islower (text[j])) 
    { 
    printf("%c", l); 
    x++; 
    } 
}else 
{ 
    printf("%c", text[j]); 
} 
if(x == strlen(key)) 
{ 
    x = 0; 
} 
} 
printf("\n"); 
return 0; 
} 

私はint型のp、int型のLが間違っている場合は、それは他の問題であれば入れて理解することはできません。

聞くには、入力/出力exempel

です:)「」「」「」

キーワード

としてを使用して:(として「バズ」を使用して「caqgon」として「barfooを」暗号化とを暗号化し、期待される出力\キーワード ではなく、 "暗号文:casgopする\ n":

は:("CaQGon" 期待される出力\キーワード として "バズ" を使用してではなく、 "CaSGoo \ n個の暗号文" として "BaRFoo" を暗号化し、

:(「BARFOO」を「CAQGON」として暗号化する期待される出力\キーワード として "BAZ" が、 "暗号文:CASGOP \ n" はない

は:(予想される出力\キーワード として "バズ" を使用して "!?世界$" "!?xoqmd $" などを暗号化し、ではなく、 "暗号文:!xosmd $ \ nは?"

は:("世界は、挨拶!" と期待出力\キーワード として "バズ" を使用して、暗号化ではなく、「暗号文 "xoqmd、RBYのgflkp!": \ n "

+0

あなたはどんなインプットを提供していますか、どのようなアウトプットを期待していますか?コードは、それが読みにくいので、インデントされた方が良いでしょう。 –

+0

@ChrisTurner私の推測では、引数として渡されたキー(argv [1])は3文字の長さの文字列です。 acipi9 if(x == strlen(key)+1) –

+0

@ J.A.I.Lで試してください。推測よりも入出力の実際の例を持つほうがよいでしょう:) –

答えて

0

暗号のwikipediaの説明を見て、数学を解くと、17(R)+ 25(Z)mod 26(16(Q))なので... Zで任意の文字を暗号化すると、あなたはQの前に文字を得るでしょう。

しかし、あなたのコードでは数学が行われていません - 間違った場所に誤った "%strlen(key)"があります。理由はSであるべきだと思います。key以下のようなので、その結果、あなたはそれがより多くの読み取り可能なコードになりますように私は文字で65 & 97を置き換えに気づくでしょう、x

p = (((text[j] - 'A') + (key[j % strlen(key)] - 'A')) % 26) + 'A'; 
l = (((text[j] - 'a') + (key[j % strlen(key)] - 'a')) % 26) + 'a'; 

また変数に捨てることができます。

+0

小文字で助けました – acipi9

+0

大文字./vigenere ABCDEFGHIJKLMNOPQRSTUVWXYZ 平文:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 暗号文:あなたの鍵は、あなたの平文に異なる場合であれば、それは各方程式の間違ったの半分を取得しますので、[\]^_ 'aHIJKLMNOPQRSTUVWXYZ [\]^_' aHIJKLMNOPQRSTU – acipi9

+0

はい、それは - 暗号ではありません大文字と小文字の混在したテキスト用に設計しかし、それは簡単に修正できます。それぞれの文字がキーと平文に別々に入っているかどうかを個別に調べてから、結果について数学を行います。 –

関連する問題