C++ Vigenere密码

C++ Vigenere Cipher

我用 C++ 为 Vigenere Cipher 编写了这段代码(假设明文和密钥为小写)。

void encrypt(string& plaintext , string key){
int j = 0;

  for(int i=0; i<plaintext.length(); i++){

     //cout<<"value of key["<<j<<"] = "<<int(key[j])<<endl;

     plaintext[i] -= 97;
     key[j] -= 97;

     plaintext[i] = ((plaintext[i] + key[j])%26)+97;

     j = (j+1)%key.length();
  }
}

问题是当 'j' 重置为 0 时,key[j] 结果为 NULL(0)。 例如。如果我假设 明文是 'human' 并且 密钥是 'abcd' 明文的前 4 个字符被加密正确但对于最后一个字符,key[j] 值变成 0 或 Null 而不是返回 'a'.

我不确定为什么会这样。我想字符串 class 隐式处理 Null 值,这让我更加困惑。

key[j] -= 97;

第一次通过密钥时,这段代码会乱涂乱画。

如果 key 是 "abcd",在第二次传递时它现在将是 0。

不要在您的函数中修改 key。由于不应更改该参数,因此应将其声明为 const std::string key,或者更好的是 const std::string &key。如果那样做,编译器会为您捕获此错误。