C中密码的解密

Decryption of cypher in C

我正在用 C 语言制作凯撒图书馆。 库源代码包含以下函数,returns 给定字符的加密等价物:

char    cypher_charac(char charac, int key)
{
    if (islower(charac)) {
            charac = 'a' + (charac - 'a' + key) % 26 ;
            return charac ;
    } else if (isupper(charac)) {
            charac = 'A' + (charac - 'A' + key) % 26 ;
            return charac
    } else{
            return charac ;
        }
}

该函数在调用加密时效果很好。 但是,当用于解密(key = -key)时,函数returns非字母字符。

我已经检查了多个论坛和不同的代码,但我就是看不到。

谢谢!

问题在于如何在 C 中为负数定义 % 余数运算 - 负数的余数是负数,绝对不在 0 - 25 范围内! C中%的定义与Python的定义不同,但与Javascript.

的定义类似

考虑使用 13 作为加密密钥的行业标准 ROT13 算法。现在如果 charac = 'A',那么 charac - 'A' + key 将等于 -13(-13) % 26still -13 .将其添加到 'A',您将不会有 'N',而是 '4'


要获得正确的解密密钥,您必须从 26 中减去加密密钥,而不是取反(即key = 26 - key).对于 ROT13,它将是 26 - 13,再次等于 13。对于标准剖腹产 ROT3,解密密钥将为 23。对于 ROT26,解密密钥将为 0。同样,您的方法在 Python 也许还有许多其他编程语言,但那是因为 (-13) % 26 结果是 +13,而不是 -13!

感谢您的回答。问题已解决。

如前所述,问题出在C中的%定义上

当我替换时它起作用了: charac = 'a' + (charac - 'a' + key) % 26 代码中

与 : charac = 'a' + (((charac - 'a' + cle) % 26) + 26) % 26

这对负键和正键都有效。