我正在为C中的Caesar密码设置一个问题集。我想我得到了该程序的工作。理想情况下,我们希望考虑大于26的较大密钥(因此使用%)。
我的代码:https://github.com/al2613/caesar-cipher-c/blob/master/caesar.c
我正在研究潜在的解决方案,并发现以下内容: https://gist.github.com/CraigRodrigues/100ab759b6b6722ba3ad8acf12e26371
两者似乎都有相同的输出(即hello的key = 53变为ifmmp)
我很好奇为什么两者都有效?是否有必要包括此部分:
if (islower(plain_text[i]))
{
if (encrypt > 122)
{
printf("%c", 96 + ((encrypt - 122) % 26));
}
else
{
printf("%c", encrypt);
}
看来克雷格的解决方案更清洁了。我见过人们使用x - 122或x - 90方法来解释超出aA-zZ的ASCII值,这就是我合并它的原因。但我并不完全确定这是如何或为何如此有效,特别是在mod 26的背景下。