【发布时间】:2020-04-18 07:21:11
【问题描述】:
我正在为 C 编写加密/解密代码。 虽然我的代码加密和解密足够好,但仍然存在一些错误。 我希望用户输入介于“!”之间(ASCII 值 32)和 '~'(ASCII 值 126),但是,当用户输入具有相当高的偏移量/键值的字符(例如 '~')时,输出在扩展的 ASCII 字符范围内。有什么方法可以强制输出不在扩展字符范围内并且仍然正确解密/加密?
我已经搞砸了更改“密码”的值,但没有太大帮助。
下面是我的代码
void Encryption(char* OriginalText, int offset) {
int i = 0;
int cipher;
char encrypt;
printf("Encrypted string: \n");
while (OriginalText[i] != '\0') {
if (OriginalText[i] == ' ') {
encrypt = ' ';
printf("%c", encrypt);
i = i + 1;
}
cipher = ((int)OriginalText[i] + (offset % 26) % -26);
encrypt = (char)(cipher);
printf("%c", encrypt);
i = i + 1;
}
printf("\n");
}
【问题讨论】:
-
通常的策略是只移动字母并保留所有其他字符。 (顺便说一句,你的
if不应该有一个else吗?)你也可以在更大的范围内旋转;例如,从'!'转移到'~'就是 rot47 所做的。在这种情况下,一些字母会变成符号,反之亦然。如果范围是[min, min + n),如果是0 ≤ offset < n,那么new = min + (old - min + offset) % n。 -
您的
cipher与Caesar cipher 不匹配 -
这不是你的问题,但代码有缓冲区溢出,例如如果 OriginalText 是
"hello "。
标签: c encryption caesar-cipher