需要一些蛮力凯撒密码的帮助

时间:2017-03-15 01:41:55

标签: c++ encryption cryptography caesar-cipher

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

Image 1

Image 2

1 个答案:

答案 0 :(得分:-1)

您正在解密message,所以当您进行第二次猜测时,您正在解密第一次解密的​​结果。第三个猜测是使用第二个解密的结果等。

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

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