【问题标题】:XOR encryption program not encrypting the whole sentenceXOR 加密程序不加密整个句子
【发布时间】:2021-09-29 07:40:13
【问题描述】:

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

我正在尝试使用 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!='\0'){
  
        cipher = a ^ b;
    
        cout << cipher;

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

     }

    }

我得到的结果如下截图:

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

【问题讨论】:

  • 如果曾经有一个程序可以在调试器中单步执行,就是这样。
  • "这是一个更新的问题" - 这是您的previous question 的延续吗?如果是这样,为什么将其作为一个新问题发布,而不是作为对上一个问题的编辑?
  • 附注:cin.ignore(); 应该在cin&gt;&gt;option; 之后,而不是在encrypt_stand_message() 内部。
  • 这应该是对您上一个问题的修改,而不是一个全新的问题。请删除其中一个,并查看站点指南以了解将来执行此操作的正确方法。此外,consolte 输出是文本,可以直接复制并粘贴到您的帖子中。这些图像完全没有必要。仅当没有它们就无法证明问题时才应使用图像。
  • 请注意:300 与 500 不同。

标签: c++ encryption key xor


【解决方案1】:

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

Online Demo

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

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

Online Demo

【讨论】:

  • 感谢您抽出宝贵时间回答!
猜你喜欢
  • 1970-01-01
  • 2019-03-11
  • 2017-01-02
  • 2017-12-18
  • 1970-01-01
  • 2014-10-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多