我想做一个维格纳密码。我的问题是我得不到预期的产出。运行程序时,它会给出以下输出:HFNLP WPTLE。正确的输出应该是:HFNLP YOSND。
我认为问题在于模块(mod)的错误使用。当我试图用变量i环绕键(ABC)时,明文中的空格(“”)也会环绕,直接影响环绕的结果。我不知道该怎么做才能得到正确的结果。

string plainText = "HELLO WORLD";
string keyword =   "ABC";

 for(int i = 0; i < strlen(plainText);i++)
 {

    int wrap =  (int) strlen( keyword) % (int) strlen(plainText);

     if(isalpha(plainText[i]))
     {

     int upper = 'A' + (plainText[i] + (toupper(keyword[i % wrap]))) % 26;
     printf("%c", upper);

     }

最佳答案

非字母字符上的键索引不能增加。
修复示例:

char *keyp = keyword;
char ch;
for(int i = 0; ch = plainText[i]; i++){
    if(isalpha(ch)){
        putchar('A' + (toupper(ch) - 'A' + toupper(*keyp++) - 'A') % 26);
        if(!*keyp)
            keyp = keyword;
    } else
        putchar(ch);
}

关于c - 如何在C中调试Vigenere密码?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32263156/

10-11 23:06