网络验证写法

调用Wininet.dll进行网络访问


#import  "Wininet.dll"
int InternetOpenW(string,int,string,string,int);
int InternetConnectW(int,string,int,string,string,int,int,int);
int HttpOpenRequestW(int,string,string,int,string,int,string,int);
int InternetOpenUrlW(int,string,string,int,int,int);
int InternetReadFile(int,uchar &sBuffer[],int,int &OneInt[]);
int InternetCloseHandle(int);
#import
功能函数



bool Check(string softType)
  {
//--- Demo, contest or real account
   ENUM_ACCOUNT_TRADE_MODE account_type=(ENUM_ACCOUNT_TRADE_MODE)AccountInfoInteger(ACCOUNT_TRADE_MODE);
//--- Now transform the value of  the enumeration into an understandable form
   string trade_mode;
   switch(account_type)
     {
      case  ACCOUNT_TRADE_MODE_DEMO:
         trade_mode="demo";
         break;
      case  ACCOUNT_TRADE_MODE_CONTEST:
         trade_mode="contest";
         break;
      default:
         trade_mode="real";
         break;
     }
     
   string AccountID=AccountNumber();

   string 邀请码="";

   int read[1];
   string strWebPage="";
   uchar buffer[1024];

   string checksum=MD5(邀请码+"|"+AccountID+"|"+trade_mode);
   string checksum2=MD5(邀请码+"|"+AccountID+"|"+trade_mode+"|ABCC");

   int HttpOpen=InternetOpenW(" ",0," "," ",0);
   int HttpConnect = InternetConnectW(HttpOpen, "", 80, "", "", 3, 0, 1);
   int HttpRequest = InternetOpenUrlW(HttpOpen,"http://www.jinrongjiaoyizhe.com/forex/check.php?a="+AccountID+"&u="+邀请码+"&t="+trade_mode+"&c="+checksum+"&s="+softType, NULL, 0, 0, 0);

   while(!IsStopped())
     {
      InternetReadFile(HttpRequest,buffer,1024,read);

      if(read[0]>0)
        {
         strWebPage+=CharArrayToString(buffer,0,read[0],936);  ///GB2312 codpage = 936
        }
      else
         break;
     }

   ArrayFree(buffer);

   if(HttpRequest>0) InternetCloseHandle(HttpRequest);
   if(HttpConnect>0) InternetCloseHandle(HttpConnect);
   if(HttpOpen>0) InternetCloseHandle(HttpOpen);

   if(strWebPage==checksum2)
      return true;

   return false;
   
}
MD5加密函数



string MD5(string str)
  {
   int len=StringLen(str);
   int index=len%64; //mod 64
   int count= (len - index) / 64;

   int a=(int) 0x67452301,b=(int) 0xEFCDAB89,c=(int) 0x98BADCFE,d=0x10325476;
   int buff[16],last[16],i,k,last_char[4],last_index;
   string item;
   for(i=0; i<count; i++)
     {
      item=StringSubstr(str,i*64,64);
      StringToIntegerArray(buff,item);
      MD5Transform(a,b,c,d,buff);
     }
   ArrayInitialize(last,0);
   ArrayInitialize(last_char,0);
   last_index=0;
   if(index>0) 
     {
      int last_num=index%4;
      count=index-last_num;
      if(count>0) 
        {
         item=StringSubstr(str,i*64,count);
         last_index=StringToIntegerArray(last,item);
        }
      for(k=0; k<last_num; k++)
        {
         last_char[k]=StringGetChar(str,i*64+count+k);
        }
     }
   last_char[k]=0x80;
   last[last_index]=CharToInteger(last_char);
   if(index>=56) 
     {
      MD5Transform(a,b,c,d,last);
      ArrayInitialize(last,0);
     }
   last[14] =  len << 3;
   last[15] =  ((len >> 1) & 0x7fffffff) >> 28;
   MD5Transform(a,b,c,d,last);
   return (StringConcatenate(IntegerToString(a) , IntegerToString(b) , IntegerToString(c) ,  IntegerToString(d)));
  }
其它子函数



int F(int x,int y,int z)
  {
   return ((x & y) | ((~x) & z));
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int G(int x,int y,int z)
  {
   return ((x & z) | (y & (~z)));
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int H(int x,int y,int z)
  {
   return ((x ^ y ^ z));
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int I(int x,int y,int z)
  {
   return ((y ^ (x | (~z))));
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int AddUnsigned(int a,int b)
  {
   int c=a+b;
   return (c);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int FF(int a,int b,int c,int d,int x,int s,int ac)
  {
   a=AddUnsigned(a,AddUnsigned(AddUnsigned(F(b,c,d),x),ac));
   return (AddUnsigned(RotateLeft(a, s), b));
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int GG(int a,int b,int c,int d,int x,int s,int ac)
  {
   a=AddUnsigned(a,AddUnsigned(AddUnsigned(G(b,c,d),x),ac));
   return (AddUnsigned(RotateLeft(a, s), b));
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int HH(int a,int b,int c,int d,int x,int s,int ac)
  {
   a=AddUnsigned(a,AddUnsigned(AddUnsigned(H(b,c,d),x),ac));
   return (AddUnsigned(RotateLeft(a, s), b));
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int II(int a,int b,int c,int d,int x,int s,int ac)
  {
   a=AddUnsigned(a,AddUnsigned(AddUnsigned(I(b,c,d),x),ac));
   return (AddUnsigned(RotateLeft(a, s), b));
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int RotateLeft(int lValue,int iShiftBits)
  {
   if(iShiftBits == 32) return (lValue);
   int result=(lValue<<iShiftBits)|(((lValue>>1)  &0x7fffffff)>>(31-iShiftBits));
   return (result);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
/*
* assume: len % 4 == 0; 
*/
/*
int StringToIntegerArray(int &output[],string l_input)
  {
   int len;
   int i,j;
   len=StringLen(l_input);
   if(len%4!=0) len=len-len%4;
   int size=ArraySize(output);
   if(size<len/4) 
     {
      ArrayResize(output,len/4);
     }
   for(i=0,j=0; j<len; i++,j+=4)
     {
      output[i]=(StringGetChar(l_input,j))|((StringGetChar(l_input,j+1))<<8)
                |((StringGetChar(l_input,j+2))<<16)|((StringGetChar(l_input,j+3))<<24);
     }
   return(len/4);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+

string IntegerToString(int integer_number)
  {
   string hex_string="",hex_item;
   int output[4];
   output[0] = integer_number & 0xff;
   for(int k = 1; k < 4; k++)
     {
      output[k]=(((integer_number>>1)  &0x7fffffff)>>(k*8 -1))  &0xff;
     }
   for(int i=0; i<4; i++)
     {
      hex_item=Dec2Hex(output[i]);
      hex_string=StringConcatenate(hex_string,hex_item);
     }
   return(hex_string);
  }
*/
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
/**
*assume num is little than 256
*/
/*
string Dec2Hex(int num)
  {
   int modnum;
   string hex;
   for(int i=0; i<2; i++)
     {
      modnum=num%16;
      num = (num - modnum) / 16;
      hex = StringConcatenate(IntToHexString(modnum), hex);
     }
   return (hex);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
string IntToHexString(int a)
  {
   string hex="0";
   ushort ascii;
   if(a<10) 
     {
      ascii ='0'+a;
        } else {
      ascii='a'+a-10;
     }
   return (StringSetChar(hex, 0, ascii));
  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CharToInteger(int &a[])
  {
   return ((a[0]) | (a[1] << 8) | (a[2] << 16) | (a[3] << 24));
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
/*
* assume: ArraySize(x) == 16
*/
/*
void MD5Transform(int &a,int &b,int &c,int &d,int &x[])
  {
   int AA,BB,CC,DD;
   int S11=7, S12=12, S13=17, S14=22;
   int S21=5, S22=9 , S23=14, S24=20;
   int S31=4, S32=11, S33=16, S34=23;
   int S41=6, S42=10, S43=15, S44=21;

   AA=a; BB=b; CC=c; DD=d;
   a=FF(a,b,c,d,x[0], S11, (int) 0xD76AA478);
   d=FF(d,a,b,c,x[1], S12, (int) 0xE8C7B756);
   c=FF(c,d,a,b,x[2], S13, (int) 0x242070DB);
   b=FF(b,c,d,a,x[3], S14, (int) 0xC1BDCEEE);
   a=FF(a,b,c,d,x[4], S11, (int) 0xF57C0FAF);
   d=FF(d,a,b,c,x[5], S12, (int) 0x4787C62A);
   c=FF(c,d,a,b,x[6], S13, (int) 0xA8304613);
   b=FF(b,c,d,a,x[7], S14, (int) 0xFD469501);
   a=FF(a,b,c,d,x[8], S11, (int) 0x698098D8);
   d=FF(d,a,b,c,x[9], S12, (int) 0x8B44F7AF);
   c=FF(c,d,a,b,x[10],S13, (int) 0xFFFF5BB1);
   b=FF(b,c,d,a,x[11],S14, (int) 0x895CD7BE);
   a=FF(a,b,c,d,x[12],S11, (int) 0x6B901122);
   d=FF(d,a,b,c,x[13],S12, (int) 0xFD987193);
   c=FF(c,d,a,b,x[14],S13, (int) 0xA679438E);
   b=FF(b,c,d,a,x[15],S14, (int) 0x49B40821);

   a=GG(a,b,c,d,x[1], S21, (int) 0xF61E2562);
   d=GG(d,a,b,c,x[6], S22, (int) 0xC040B340);
   c=GG(c,d,a,b,x[11],S23, (int) 0x265E5A51);
   b=GG(b,c,d,a,x[0], S24, (int) 0xE9B6C7AA);
   a=GG(a,b,c,d,x[5], S21, (int) 0xD62F105D);
   d=GG(d,a,b,c,x[10],S22, (int) 0x2441453);
   c=GG(c,d,a,b,x[15],S23, (int) 0xD8A1E681);
   b=GG(b,c,d,a,x[4], S24, (int) 0xE7D3FBC8);
   a=GG(a,b,c,d,x[9], S21, (int) 0x21E1CDE6);
   d=GG(d,a,b,c,x[14],S22, (int) 0xC33707D6);
   c=GG(c,d,a,b,x[3], S23, (int) 0xF4D50D87);
   b=GG(b,c,d,a,x[8], S24, (int) 0x455A14ED);
   a=GG(a,b,c,d,x[13],S21, (int) 0xA9E3E905);
   d=GG(d,a,b,c,x[2], S22, (int) 0xFCEFA3F8);
   c=GG(c,d,a,b,x[7], S23, (int) 0x676F02D9);
   b=GG(b,c,d,a,x[12],S24, (int) 0x8D2A4C8A);

   a=HH(a,b,c,d,x[5], S31, (int) 0xFFFA3942);
   d=HH(d,a,b,c,x[8], S32, (int) 0x8771F681);
   c=HH(c,d,a,b,x[11],S33, (int) 0x6D9D6122);
   b=HH(b,c,d,a,x[14],S34, (int) 0xFDE5380C);
   a=HH(a,b,c,d,x[1], S31, (int) 0xA4BEEA44);
   d=HH(d,a,b,c,x[4], S32, (int) 0x4BDECFA9);
   c=HH(c,d,a,b,x[7], S33, (int) 0xF6BB4B60);
   b=HH(b,c,d,a,x[10],S34, (int) 0xBEBFBC70);
   a=HH(a,b,c,d,x[13],S31, (int) 0x289B7EC6);
   d=HH(d,a,b,c,x[0], S32, (int) 0xEAA127FA);
   c=HH(c,d,a,b,x[3], S33, (int) 0xD4EF3085);
   b=HH(b,c,d,a,x[6], S34, (int) 0x4881D05);
   a=HH(a,b,c,d,x[9], S31, (int) 0xD9D4D039);
   d=HH(d,a,b,c,x[12],S32, (int) 0xE6DB99E5);
   c=HH(c,d,a,b,x[15],S33, (int) 0x1FA27CF8);
   b=HH(b,c,d,a,x[2], S34, (int) 0xC4AC5665);

   a=II(a,b,c,d,x[0], S41, (int) 0xF4292244);
   d=II(d,a,b,c,x[7], S42, (int) 0x432AFF97);
   c=II(c,d,a,b,x[14],S43, (int) 0xAB9423A7);
   b=II(b,c,d,a,x[5], S44, (int) 0xFC93A039);
   a=II(a,b,c,d,x[12],S41, (int) 0x655B59C3);
   d=II(d,a,b,c,x[3], S42, (int) 0x8F0CCC92);
   c=II(c,d,a,b,x[10],S43, (int) 0xFFEFF47D);
   b=II(b,c,d,a,x[1], S44, (int) 0x85845DD1);
   a=II(a,b,c,d,x[8], S41, (int) 0x6FA87E4F);
   d=II(d,a,b,c,x[15],S42, (int) 0xFE2CE6E0);
   c=II(c,d,a,b,x[6], S43, (int) 0xA3014314);
   b=II(b,c,d,a,x[13],S44, (int) 0x4E0811A1);
   a=II(a,b,c,d,x[4], S41, (int) 0xF7537E82);
   d=II(d,a,b,c,x[11],S42, (int) 0xBD3AF235);
   c=II(c,d,a,b,x[2], S43, (int) 0x2AD7D2BB);
   b=II(b,c,d,a,x[9], S44, (int) 0xEB86D391);

   a=AddUnsigned(a, AA); b=AddUnsigned(b, BB);
   c=AddUnsigned(c, CC); d=AddUnsigned(d, DD);
  }

可参考官网文章《使用WindInet.dll通过网络在终端间进行数据交互


本博客所有文章如无特别注明均为原创。作者:天泓评测
分享到:更多

相关推荐

发表评论

路人甲 表情
Ctrl+Enter快速提交

网友评论(0)