您好,这里的业余爱好者,最近两个月一直在学习c++。我对函数的理解不是很敏锐,对于c++中的某些运算符(例如xor)则更是如此。我正在编写一个程序,该程序将从用户处获取一个字符串,使用^运算符对其进行加密,然后对其进行解密。我认为我有基本的基础,但是我得到了一些奇怪的输出,并且我认为这与我的for循环或XOR的使用有关。我在下面的程序中,任何帮助将不胜感激。
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
const short SIZE = 132;
class deer
{
public:
char inputdata();
char encryptdata(char inputbuffer[SIZE], char encryptbuffer[SIZE]);
char inputbuffer[SIZE];
char encryptbuffer[SIZE];
char decryptbuffer[SIZE];
char decrpytdata(char n[], char p[]);
long e;
long count;
};
int main()
{
deer obj;
obj.inputdata();
obj.encryptdata(obj.inputbuffer, obj.encryptbuffer);
obj.decrpytdata(obj.encryptbuffer, obj.decryptbuffer);
system("pause");
return 0;
}
char deer::inputdata()
{
cout << "please enter your text to be encrpyted" << endl;
cin.getline(inputbuffer, SIZE);
cin.gcount();
count =cin.gcount();
count--;
cout << inputbuffer << endl;
return 0;
}
char deer::encryptdata(char inputbuffer[], char encryptbuffer[])
{
short key = 0xAC;
int i = 0;
for (int i = 0; i <= count; i++) {
inputbuffer[i] = encryptbuffer[i] ^= key;
cout << encryptbuffer << endl;
}
return *encryptbuffer;
}
char deer::decrpytdata(char encryptbuffer[], char decryptbuffer[])
{
int i = 0;
for (int i = 0; i <= count; i++) {
encryptbuffer[i] ^= decryptbuffer[i];
}
cout << decryptbuffer << endl;
return decryptbuffer;
}
最佳答案
使用XOR进行加密和解密需要相同的密钥(例如代码中的0xAC)。通过将encryptbuffer
与密钥异或生成inputbuffer
,通过将decryptbuffer
与密钥异或生成encryptbuffer
。因此,密钥必须是deer
的成员。
由于inputbuffer
,encryptbuffer
和decryptbuffer
是类鹿的成员,因此在调用成员函数enctyptdata
和decryptdata
时不需要将它们作为参数。
加密功能:
char deer::encryptdata()
{
for (int i=0; i<count; ++i)
{
encryptbuffer[i] = inputbuffer[i] ^ key;
}
cout << encryptbuffer << endl;
}
解密功能:
char deer::decryptdata()
{
for (int i=0; i<count; ++i)
{
decryptbuffer[i] = encryptbuffer[i] ^ key;
}
cout << decryptbuffer << endl;
}
鹿类:
class deer
{
static const char key = 0xAC;
...
};