#include <string>
using namespace std;
string ReverseStr(string strFormer)
{
string strReversed = "";
string:: iterator iter = strFormer.end();
while(iter != strFormer.begin())
{
strReversed += *(--iter);
}
return strReversed;
}
string Decode(string PlainStr, string key)
{
int i;
string jiemi;
string KeyChar;
string NewStr;
int Pos;
string Side1;
string Side2;
string strChar;
int _Vb_t_i4_0;
Pos = 1;
if(PlainStr.size()%2 == 0)
{
Side1 = ReverseStr(PlainStr.substr(0, PlainStr.size()/2));
Side2 = ReverseStr(PlainStr.substr(PlainStr.size()/2));
PlainStr = Side1 + Side2;
}
_Vb_t_i4_0 = PlainStr.size();
int bl_1, bl_2, bl_3, bl_4=0;
for(i=1; i<=_Vb_t_i4_0; i++)
{
strChar = PlainStr.substr(i-1, 1);
KeyChar = key.substr(Pos-1, 1);
bl_1 = (strChar[0] ^ KeyChar[0]) < 32? 1:0;
bl_2 = (strChar[0] ^ KeyChar[0]) > 126? 1:0;
bl_3 = (strChar[0] < 0? 1:0) | (bl_1 | bl_2);
bl_4 = (strChar[0] > 0xFF? 1:0) | bl_3;
if(bl_4)
{
cout << "if" << endl;
NewStr += strChar;
cout << "strChar :" <<endl;
}
else
{
cout << "else" << endl;
char ch = strChar[0] ^ KeyChar[0];
string str = "";
str += ch;
NewStr += str;
cout << strChar << " xor " << KeyChar << " is " << ch << endl;
}
if(key.size() == Pos)
{
cout << "key.size() == Pos" << endl;
Pos = 0;
}
Pos += 1;
}
jiemi = NewStr;
return jiemi;
}
int main()
{
string src("this is an apple");
string key("123456");
string decode = Decode(src,key);
cout<<decode<<endl;
return 0;
}
程序運行效果圖:
上例是在main函數裏用了測試的字符串和密碼。
如果想做成類似DOS命令壹樣的效果,請下載附件,裏面有源代碼和exe文件。