以下程序尝试加密字符串并保存到文本文件中,并打开文件,解密并显示消息。Visual C++ XOR加密错误
这里是代码 -
private: System::Void saveToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) {
SaveFileDialog^ dlg = gcnew SaveFileDialog();
dlg->Filter = "Text Files|*.txt";
char key = 'a';
if(dlg->ShowDialog()==Windows::Forms::DialogResult::OK)
{
String^ stream = txtOutput->Text;
char* num = new char[stream->Length];
char* xorchar = (char*)(void*)Marshal::StringToHGlobalAnsi(stream);
int i=0;
for(i=0;i<stream->Length;++i){
num[i] = *xorchar^key;
*xorchar++;
}
num[i] = '\0'; //add trailing NULL
//Marshal::FreeHGlobal((System::IntPtr)(void*)xorchar); THIS WAS GIVING AN ERROR, NOT SURE WHY
String^ save = gcnew String(num);
System::IO::File::WriteAllText(dlg->FileName, save);
}
}
private: System::Void openToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) {
OpenFileDialog^ dlg = gcnew OpenFileDialog();
dlg->Filter = "Text Files|*.txt";
String^ stream;
char key = 'a';
if(dlg->ShowDialog()==Windows::Forms::DialogResult::OK)
{
stream = System::IO::File::ReadAllText(dlg->FileName);
char* num = (char*)(void*)Marshal::StringToHGlobalAnsi(stream);
int i=0;
for (i=0;i<stream->Length;++i)
{
num[i] = num[i]^key; //DECRYPT
}
String^ orig_stream = gcnew String(num);
txtOutput->Text = orig_stream;
}
}
现在的问题是,当我输入一个字符串,它只能是在不等于关键角色。 例如,让key ='a'
例如:INPUT:“我喜欢这个”//这将正确解密。
输入:“我喜欢苹果”//只有'我喜欢'才会解密,休息不会显示。
即,如果遇到字符“键”(在本例中为'a'),则停止解密。
任何帮助表示赞赏。谢谢!
空间后的“Like”很可能越来越异或零值。确保你正在读/写二进制文件中的数据。 – 2011-12-29 19:56:13
实际上,它不是''('关键'),它将异或为'\ 0'('null')吗?这会在你真正想要之前终止字符串。 – 2011-12-29 20:03:25
使用Encoding :: Default :: GetBytes()将字符串转换为byte []和File :: WriteAllBytes()来保存结果。 – 2011-12-29 20:38:05