我似乎无法弄清楚为什么解密中只有某些字母不起作用。我正在尝试用10的密钥解密字母kddkmu。它应该冒出来攻击,但是每次我运行代码时,它都会出现在aZZack上。我相信问题与我的模数运算有关,但是无论我做什么我都无法解决问题。
** building package indices
** testing if installed package can be loaded
* DONE (h2osteam)
使用
int key = 10;
ciphertext = "kddkmu";
plaintext = shift_decrypt(ciphertext, key);
cout << "2. Decryption of the ciphertext: " << ciphertext << endl;
cout << " Key: " << key << endl;
cout << " Plaintext; " << plaintext << endl << endl;
由于某种奇怪的原因,我只是将dd解密为ZZ而没有收到任何错误
答案 0 :(得分:0)
我不建议使用模(余数)运算符相减。
我们知道(X * 26) % 26 == 0
用于所有X。
因此,我们可以免费增加26个。
要减去,我们可以在值上加上(26-Y),但仍为正值。
循序渐进:
1)将字符移到0 - 25
范围内,包括:
int value = letter - 'a';
2)通过“减去”键来删除凯撒偏移量:
value = (value + 26 - key) % 26;
3)将值移动到a
至z
范围内:
char decrypted_letter = value + 'a';