当偏移量为 11 或更大时,解密 Caesar 密码将失败

Decrypting Caesar cipher fails when offset is 11 or more

本文关键字:解密 Caesar 密码 失败 偏移量      更新时间:2023-10-16

我正在做一个解密程序。我一直在寻找并试图弄清楚这一点,但我什么也没看到。因此,当我解密例如9adwrqxvni0348&4#9时,它很好,但是当我的偏移量为 11 或更多时,它会解密除最后一个字符之外的所有字符。无论过去11的偏移量是多少,最后一个字符都是相同的。我刚才把所有的字母都塞进去了,它们起作用了。它只是最后一个数字字符,在 11 之后不起作用。

for (int count = 0; count < length; count++)
{
    if (msg[count] >= 'a' && msg[count] <= 'z')//Letter wraping
    {
        dmsg += ((msg[count] - 'a' - offset + 26) % 26) + 'a';
    }
    else if (msg[count] >= '0' && msg[count] <= '9')//Number wraping
    {
        dmsg += (abs(msg[count] - '0' - offset + 10) % 10) + '0';
    }       
}
在我看来

,当偏移量大于 10 时,添加 10 不会在任何等于或小于偏移量与 10 之差的数字上创建适当的正值。 一种解决方法是修改 10 个偏移量:

dmsg += ( abs( msg[count] - '0' - ( offset % 10 ) + 10 ) % 10 ) + '0';