在解密程序中使用负数取模时出现问题

2023-12-07

我对 C 相当陌生,最近一直致力于制作一个简单的加密/解密程序。我设法很好地进行了加密,但在解密方面遇到了障碍。

相关代码如下:

加密(其中 asciinum 是字母的 ascii 值,k 是要移动的“vigenere”密钥)。

//shifts lowercase letters by key
    if (asciinum >= 97 && asciinum <= 123)
    {
        f = p % keylen;
        k = key[f];
        asciinum = (asciinum - 97) + k;
        asciinum = (asciinum % 26) + 97;
        letterc = (char) asciinum;
        //printf("%c\n", letterc);
        cipher[j] = letterc;
        p++;
    }

    //shifts uppercase letters by key
    if (asciinum >= 65 && asciinum <= 91)
    {
        f = p % keylen;
        k = key[f];
        asciinum = (asciinum - 65) + k;
        asciinum = (asciinum % 26) + 65;
        letterc = (char) asciinum;
        cipher[j] = letterc;
        p++;
    }

我想使用类似的模型来解密(使用相同的密钥),但是当 asciinum 为负数时,我用来环绕 26 个字符的模方法不起作用,就像从 ( 中减去 5 的 k 的情况一样)即 0)。

解密尝试...

    //shifts uppercase letters by key
    if (asciinum >= 65 && asciinum <= 91)
    {
        f = p % keylen;
        k = key[f];
        asciinum = (asciinum - 65) - k;
        asciinum = (asciinum % 26) + 65;
        letterc = (char) asciinum;
        cipher[j] = letterc;
        p++;
    }

任何帮助将不胜感激。谢谢!


在 C99 之前的 C 中,%负数是实现定义的。从 C99 开始,它被定义了,但并没有做你想要的。

最简单的方法是:

((asciinum + 26) % 26)

假设asciinum永远不会低于-26。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在解密程序中使用负数取模时出现问题 的相关文章

随机推荐