我正在将一个简单的 Vigenere 密码应用于输入文件。我用来加密单个字符的代码是:
char CryptoModule::Vigenere(char& letter)
{
char encryptedVal = (letter + EncryptKey_[iterator_])%128;
iterator_ = iterator_ == EncryptKey_.size()?0:iterator_+1;
return encryptedVal;
}
但是,模数的行为非常奇怪。当字母为 '0' (ASCII char 48) 时,密钥为“Chunky Peanut Butter”,第 9 个字符用于加密(char 'a',即 ASCII 97),那么人们会期望 (48 + 97) %128 = 17。但是,返回的结果是 -52。有人可以解释必须进行哪些更正才能获得预期值?编译器得出的结论是除法 2 正整数的余数是负数,这似乎很奇怪。
提前致谢,祝您有美好的一天