gpt4 book ai didi

c - 在解密程序中使用带负数的模数的问题

转载 作者:行者123 更新时间:2023-12-01 06:16:13 26 4
gpt4 key购买 nike

我是 C 的新手,最近一直致力于制作一个简单的加密/解密程序。我成功地进行了加密,但在解密时遇到了障碍。

相关代码如下:

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

//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++;
}

我想使用类似的模型来解密(使用相同的 key ),但是当 asciinum 为负时,我用来环绕 26 个字符的取模方法不起作用,就像减去 5 的 k 一样来自 a(即 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。

关于c - 在解密程序中使用带负数的模数的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6385352/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com