带USB加密锁的压力测试脚本程序编写

来源:互联网 发布:js给href赋参数值 编辑:程序博客网 时间:2024/05/01 04:36

在一个项目中,由于客户端采用了usb密码锁加密,也就是当服务器端返回一个数字串后需要在客户端插上usb key以后才能进行加密,然后将加密的结果传给服务器端进行认证,这就使得传统的压力测试录制脚本变得无效。例如使用工商银行的U盾,就是类似的情况。因此必须在脚本中加入调用客户端加密代码的功能,同时必须插入usb device,测试时候使用的测试工具是QALoad,因此可以直接用vc++来调用加密程序,但是由于加密程序直接调用存在一定的困难,因此使用vb连编写一个类并编译为dll,然后使用vc++再QALoad中进行调用。下面是在QALoad中使用vc++调用vb编写的dll相关的代码:

 

 

 

HRESULT hresult;
    CLSID clsid;
 hresult=CoInitialize(NULL);
 
    //初始化COM接口
    hresult=CLSIDFromProgID(OLESTR("ca.clsCA"), &clsid); //其中clsCA为在dll中定义的类名
 
 
 
    _clsCA *t;
 
 
 
   
    hresult=CoCreateInstance(clsid,NULL,CLSCTX_INPROC_SERVER,__uuidof(_clsCA),(void **) &t);
 
    if(FAILED(hresult))
 {
  
 }
 
 char * Field[1];
 Field[0]="0.6727308047538793";//这个就是服务器端返回的字串
 
 
 try{
  t->ranNum=Field[0];//传入要加密的字串
  t->sign();// 进行加密,该函数是在vb中的进行加密的函数
  _bstr_t s=t->strSignedData;//取得加密的数据
  const char * v=s;
  char q[1000];
  strcpy(q,v);
  
  
  char tmp[1000]="/0";
  
  for(int i=0;i<strlen(q);i++)//进行编码的转换
  {  
   if(q[i]=='+' || q[i]=='-' || q[i]=='*' ||q[i]=='/' || q[i]=='=')
   {
    
    if(q[i]=='+')
     strcat(tmp,"%2B");
    
    if(q[i]=='-')
     strcat(tmp,"%2D");
    
    if(q[i]=='/')
     strcat(tmp,"%2F");
    
    if(q[i]=='*')
     strcat(tmp,"%2A");
    
    if(q[i]=='=')
     strcat(tmp,"%3D");
    
   }
   
   
   else
   {
    strcat(tmp,"0");
    tmp[strlen(tmp)-1]=q[i];
   }
   
   
  }
  
  
  
  
  
  
  
  // _bstr_t s=t->strErr;
  
 }
 catch(_com_error e)///捕捉异常
 {
  CString errormessage;
  errormessage.Format("%s",e.ErrorMessage());
  
 }
 
 
 
 t->Release();
    CoUninitialize();

 

2.vb dll程序

原创粉丝点击