C ++中的凯撒密码解密

时间:2019-10-01 19:42:36

标签: c++ encryption caesar-cipher

我似乎无法弄清楚为什么解密中只有某些字母不起作用。我正在尝试用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而没有收到任何错误

1 个答案:

答案 0 :(得分:0)

我不建议使用模(余数)运算符相减。

我们知道(X * 26) % 26 == 0用于所有X。
因此,我们可以免费增加26个。 要减去,我们可以在值上加上(26-Y),但仍为正值。

循序渐进:
1)将字符移到0 - 25范围内,包括:
int value = letter - 'a';

2)通过“减去”键来删除凯撒偏移量:
value = (value + 26 - key) % 26;

3)将值移动到az范围内:
char decrypted_letter = value + 'a';