2007年4月2日星期一

完美世界封包加密代码(我的理解和注释、debug信息)

完美世界封包加密代码(我的理解和注释、debug信息)
#include
#include //汉字
//#include //使用<< setw(2)这些格式控制时用到的
using namespace std;


typedef struct { //这里把一个未命名结构直接取了一个叫arg1的别名,
unsigned char table[256] ;
unsigned char a;
unsigned char b;
} arg1;


void encrypt(arg1* handle, unsigned char *data, int len)
{
register unsigned char *ptr = data; //register声明为寄存器变量
register unsigned char m;
if( len <= 0 ) return;
//do while 循环结构 至少执行一次do的代码
do {
handle->a++; //a可能是作为计数变量,第一次执行后为1
cout<<"a="<a)<<"\t";
m = handle->table[handle->a]; //m(临时变量)赋值为table中的第a个char
cout<<"m="<< int(m)<<"\t";
handle->b += m; //handle->b = handle->b + m b赋值为+m
cout<<"b="<< int(handle->b)<<"\t";

cout<<"第"<< int(handle->b)<<"位置上的char "<table[handle->b])<<"与第"<a)<<"位置上的char "<table[handle->a])<<"交换\t";
handle->table[handle->a] = handle->table[handle->b]; //table中的第a个char = able中的第b个char(换位)
handle->table[handle->b] = m; //table中的第b个char=m
cout<<"输出"<< int(m)<<"+"<table[handle->a])<<"="<table[handle->a])<<"位置上的值";
cout<table[m+handle->table[handle->a]])<<"\t";
cout<<"与数组第"<< int(*(ptr))<<"位上的值"<table[*(ptr)])<<"异或运算\t";
*(ptr) = handle->table[*(ptr)] ^ handle->table[m+handle->table[handle->a]];
cout<<"最终="<< int(*(ptr))<<"\n";
ptr++;
//cout<<"a="<< int(handle->a)<<"\t"<<"b="<b)<<"\t"<<"out="<< int(*(ptr))<<"\n";
} while(ptr-data < len);
}


int main()
{

unsigned char jiami[256];
arg1 feng1;
int i,ix;
//填充结构体feng1
//为feng1.table[256]填充数据,暂时填充为0-255顺序值,a,b初始化为0
for(i=0;i<256;i++)
{
feng1.table[i] = i+7;
}
//memset(jiami,0,256); //清零接受数组


// feng1.table[0] =3;
// feng1.table[1] =212;
// feng1.table[2] =46;
// feng1.table[3] =30;
// feng1.table[4] =49;
// feng1.table[5] =59;

feng1.a = 0;
feng1.b = 0;


//循环显示feng1.table[256]的元素 ASC值和a,b值。即全部arg1结构的值
cout<<"========加密前的序列=========="<<"\n";
ix = 0;
do
{
cout<<"feng1.table["<< ix<<"]="<< int(feng1.table[ix])<<"\n";
ix++;
}while(ix < 256);

cout<<"feng1.a="<< int(feng1.a)<<"\n";
cout<<"feng1.b="<< int(feng1.b)<<"\n";


/*
cout<<"=======等待接受的数组序列=========="<<"\n";
ix = 0;
do
{
// cout<< ix<< endl;
cout<<"jiami["<< ix<<"]="<< int(jiami[ix])<<"\n";
ix++;
}while(ix < 256);
*/





//用加密函数encrypt将feng1.table[256]加密到jiami[256]里
encrypt(&feng1, jiami, 256);

//循环显示jiami[256]的元素 ASC值,即加密后的数据
cout<<"=======加密后的序列=========="<<"\n";
ix = 0;
do
{
// cout<< ix << endl;
cout<<"jiami["<< ix<<"]="<< int(jiami[ix])<<"\n";
ix++;
}while(ix < 256);


//程序结束

system("PAUSE");

return 0;

}

没有评论: