目前我正在尝试用C ++制作一个强力凯撒密码,它会在猜测每个密钥时显示所有迭代。
到目前为止,这是我的代码:
#include <iostream>
using namespace std;
int main()
{
char message[100], ch;
int i;
cout << "Enter a message to decrypt: ";
cin.getline(message, 100);
for(int key = 0; key<26 ; key++)
{
for(i = 0; message[i] != '\0'; ++i){
ch = message[i];
if(ch >= 'a' && ch <= 'z'){
ch = ch - key;
if(ch < 'a'){
ch = ch + 'z' - 'a' + 1;
}
message[i] = ch;
}
else if(ch >= 'A' && ch <= 'Z'){
ch = ch - key;
if(ch > 'a'){
ch = ch + 'Z' - 'A' + 1;
}
message[i] = ch;
}
}
cout << "Decrypted message: " << message << " " << endl ;
}
return 0;
}
我遇到的问题是当它显示猜测时,它似乎在小写时跳过字母,当它们是大写时重复卡住并重复相同的字符串。在示例中,代码是LT HDGJWJFLQJX,它应解密为GO CYBEREAGLES。大写和小写程序输出都显示在附加的图像中。
答案 0 :(得分:-1)
您正在解密message
,所以当您进行第二次猜测时,您正在解密第一次解密的结果。第三个猜测是使用第二个解密的结果等。
当您写出解密的猜测时,它应该进入与message
不同的数组,以便下一次迭代可以从原始加密数据开始。
编辑:创建另一个数组char decrypted[100];
,然后将解密的字符写入其中(decrypted[i] = ch;
)。不要忘记最后的零(零)字符。