0

このプログラムは、vigenere cypher を使用して特定のメッセージを暗号化することになっています。プログラムは、メッセージとキーワードの両方で「大文字と小文字を区別する」必要があります。プログラムが特殊文字または数字に遭遇した場合、それらもそのまま出力することになっています。

最後の部分は機能しているようで、残りの部分は、計算は正しいように見えますが、想定どおりに印刷されません。また、ASCII 値を AZ/0-26 に変換し、暗号式を実行し、それらを ASCII に変換しています。

    // key validation
    string kw = argv[1];
    int kwl = strlen(kw);
    for (int i = 0; i < kwl; i++)
    {
        if (!isalpha(kw[i]))
        {
            printf("Usage: ./vigenere keyword\n");
            return 1;
        }
    }

    // get message and length
    string mssg; 
    mssg = GetString();
    int lngth = strlen(mssg);


    // cryptography 
    int k = 0;
    for (int j = 0; j < lngth; j++)
    {
        if (isalpha(mssg[j]))
        {
            if (islower(mssg[j]))
            {
                if (islower(kw[k % kwl]))       
                    printf("%c", (((mssg[j] - 97) + (kw[k % kwl] - 97)) & 26) + 97);
                else
                    printf("%c", (((mssg[j] - 97) + (kw[k % kwl] - 65)) & 26) + 97);
                k++;
            }
            else if (isupper(mssg[j]))
            {
                if (isupper(kw[k % kwl]))
                    printf("%c", (((mssg[j] - 65) + (kw[k % kwl] - 65)) & 26) + 65);
                else
                    printf("%c", (((mssg[j] - 65) + (kw[k % kwl] - 97)) & 26) + 65);
                k++;
            }
        }    
        else
            printf("%c", mssg[j]);
    }

    printf("\n");

    return 0;
}
4

1 に答える 1