C ++ Vigenere Cipher

问题描述 投票:0回答:1

我在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)。例如。如果我假设明文为'人'并且键为'abcd',则明文的前4个字符被正确加密,但对于最后一个字符,键[j]值变为0或Null而不是返回到'a'。

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

c++ string vigenere
1个回答
1
投票
key[j] -= 97;

在第一次通过密钥时,这段代码将遍布它。

如果key是“abcd”,则在第二次传球时它将为0。

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

© www.soinside.com 2019 - 2024. All rights reserved.