我在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 –