【问题标题】:Need some assistance with a brute force Caesar Cipher需要暴力破解凯撒密码的帮助
【发布时间】:2017-03-15 01:41:54
【问题描述】:

目前我正在尝试在 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。大写和小写的程序输出都显示在所附的图像中。

【问题讨论】:

  • 您首先需要重新格式化您的代码。它没有正确排列。
  • 您的文字图片isn't very helpful。它无法大声朗读或复制到编辑器中,并且索引不是很好,这意味着有相同问题的其他用户不太可能在这里找到答案。请edit您的帖子直接合并相关文本(最好使用复制+粘贴以避免转录错误)。

标签: c++ encryption cryptography caesar-cipher


【解决方案1】:

您正在原地解密message,因此当您进行第二次猜测时,您正在解密第一次解密的​​结果。第三次猜测是使用第二次解密的结果,等等。

当你写出解密后的猜测时,它应该进入与message不同的数组,以便下一次迭代可以从原始加密数据开始。

编辑:创建另一个数组char decrypted[100];,然后将解密后的字符写入其中(decrypted[i] = ch;)。不要忘记末尾的 nul(零)字符。

【讨论】:

  • @1201ProgramAlarm 好的,谢谢您的回答!但是每当我输入消息时,一旦消息中有空格,它将停止解密,我将如何解决这个问题?
  • @Toror 在调试器中运行它以查看问题所在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-02
相关资源
最近更新 更多