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
。如果那样做,编译器会为您捕获此错误。
我用 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
。如果那样做,编译器会为您捕获此错误。