我在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时,键[j]结果为NULL(0)。 例如。如果我假设明文为'人类'和密钥为'abcd'明文的前4个字符被正确加密,但对于最后一个字符,密钥[j]值将变为0或零而不是回到'一个'。
我不知道为什么会发生这种情况。我猜字符串类隐式地处理空值,这使我更加困惑。
检查'key.length()'。对于“abcd”键,它显然应该是4,但是根据你的描述,它必须是5.无论代码设置了key的值,它都做得不正确,这就是错误所在,而不是这里。 –
@SamVarshavchik我试图打印它,它显示4 –