异或加密程序不加密整个句子
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 操作产生的某些字符是 不可打印的 控制字符,例如 0x06
、0x1B
, 甚至 0x00
, 等等
此外,您可能不应该针对 key
的空终止符对输入进行异或运算。您可以去掉 while
循环中的 if
块,而是使用 %
取模运算符,例如:
int keylen = strlen(key);
...
b = key[y % keylen];
这是一个更新的问题,包含正确的代码和几个示例,以便你们可以了解发生了什么。我真的很难尝试使工作成为一个加密程序。我只能使用字符,不能使用任何意义上的字符串。
我正在尝试使用 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 操作产生的某些字符是 不可打印的 控制字符,例如 0x06
、0x1B
, 甚至 0x00
, 等等
此外,您可能不应该针对 key
的空终止符对输入进行异或运算。您可以去掉 while
循环中的 if
块,而是使用 %
取模运算符,例如:
int keylen = strlen(key);
...
b = key[y % keylen];