Vigenere Cypher Program in C

209 Views Asked by At

This program is supposed to crypt a certain message with the vigenere cypher. The program is supposed to be 'case sensitive' both the message and the keyword. If the program encounters any special characters or numbers, is also supposed to print them untouched.

The last part seems to be working, and the rest, even though the math seems to be right, it doesn't print as it's supposed to. I'm also converting the ASCII values to A-Z/0-26, doing the cypher formula, and them converting them back to 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;
}
1

There are 1 best solutions below

0
On

I'm still getting an error somewhere on the math

The error is that you have & 26 instead of % 26.