异或加密程序不加密整个句子

XOR encryption program not encrypting the whole sentence

这是一个更新的问题,包含正确的代码和几个示例,以便你们可以了解发生了什么。我真的很难尝试使工作成为一个加密程序。我只能使用字符,不能使用任何意义上的字符串。

我正在尝试使用 XOR 运算符加密用户在程序中输入的任何消息,如您在我的代码中所见。完整代码如下:

include <stdio.h>
#include <iostream>

using namespace std;

void encrypt_stand_message();
int y = 0;
int x = 0;
int option= 0;
char cipher = ' ';
char message[300];
char key[] ="ALCtALC sixth headed civic outlying mayflower irregular boneless prevail freebase delirious projector dreamless";


main ()
{

    cout<<"Plese choose option?"<<"\n\n";

    cout<<"1. Cipher text\n\n";

    cout<<"\n";
   
    cin>>option;

    switch(option){
    
        case 1:

        encrypt_stand_message();
    
        exit(1);
    
   }


   }



void encrypt_stand_message(){

    system("clear");

    cout <<"Please enter the code to encrypt?"<< "\n\n";

    cin.ignore();

    cin.get (message, 500);

    char a = message[x];

    char b = key[y];

    while(a!='[=10=]'){
  
        cipher = a ^ b;
    
        cout << cipher;

        x+=1;
        y+=1;
    
        a = message[x];
    
        if(key[y]=='[=10=]'){
        y=0;
        }
    
        b = key[y];

     }

    }

我得到的结果在以下屏幕截图中:

如你们所见,该程序并未对用户提供的整个文本进行加密!我不知道发生了什么,但我正在疯狂地尝试解决并使这个程序正常工作。非常感谢您的帮助。

代码“加密”整个用户输入。您只是没有考虑到您的 ^ xor 操作产生的某些字符是 不可打印的 控制字符,例如 0x060x1B , 甚至 0x00, 等等

Online Demo

此外,您可能不应该针对 key 的空终止符对输入进行异或运算。您可以去掉 while 循环中的 if 块,而是使用 % 取模运算符,例如:

int keylen = strlen(key);
...
b = key[y % keylen];

Online Demo