google搜索 站内搜索                 软件测试门户 | 软件测试培训 | 文章资料精选 | 软件测试论坛 | 测试解决方案 | 软件测试博客 | 测试招聘求职 
打印

[求助] lr调用方法的问题(已解决)

lr调用方法的问题(已解决)


其实这应该是c的问题 不过既然是在lr里的 还是发在这里吧
项目中有个地方用到base64加密 找了个dll 调用一下通过 想再直接写在action中 比较一下2者速度差多少 但是解密结果不正确
应该是action里写的有问题 高手帮我看看吧
脚本如下
Action()
{   
        int l;
        char *c;
        lr_output_message("%x",c);
        lr_start_transaction("a");
        c=(char *)malloc(12*sizeof(char));
         l=base64_encode("username",8,c);//调用base64_encode
         lr_output_message("l=%d",l);//l=12 是dXNlcm5hbWU=的长度
        lr_output_message("%s",c);//输出的是“4赞” 我晕!           
           lr_end_transaction("a", LR_AUTO);
        return 0;
}

static char base64_chars[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

int base64_encode(const void *data, int size, char **str)
{
    char *s, *p;
    int i;
    int c;
    const unsigned char *q;

    p=s=(char *)malloc(size*4/3+4);
    if (p==NULL)
  return -1;
    q = (const unsigned char *)data;
    i = 0;
    for (i=0;i<size;) {
  c=q[i++];
  c*=256;
  if(i<size)
   c+=q;
  i++;
  c*=256;
  if(i<size)
   c+=q;
  i++;
  p[0]=base64_chars[(c & 0x00fc0000) >> 18];
  p[1]=base64_chars[(c & 0x0003f000) >> 12];
  p[2]=base64_chars[(c & 0x00000fc0) >> 6];
  p[3]=base64_chars[(c & 0x0000003f) >> 0];
  if (i>size)
   p[3]='=';
  if (i>size + 1)
   p[2]='=';
  p+=4;
    }
    *p=0;
    *str=s;
lr_output_message("%s",*str);//这句正确 加密结果:dXNlcm5hbWU=
           
    return strlen(s);
}

#if NTLM

static int pos(char c)
{
    char *p;
    for(p=base64_chars; *p; p++)
  if (*p==c)
   return p-base64_chars;
  return -1;
}

#define DECODE_ERROR 0xffffffff

static unsigned int token_decode(const char *token)
{
    int i;
    unsigned int val=0;
    int marker=0;
    if (strlen(token)<4)
  return DECODE_ERROR;
    for (i=0; i<4;i++) {
  val *=64;
  if (token=='=')
   marker++;
  else if (marker>0)
   return DECODE_ERROR;
  else
   val+=pos(token);
    }
    if (marker>2)
  return DECODE_ERROR;
    return (marker<<24) | val;
}

int
base64_decode(const char *str, void *data)
{
    const char *p;
    unsigned char *q;

    q = data;
    for (p = str;*p&&(*p =='='||strchr(base64_chars,*p));p+=4) {
  unsigned int val=token_decode(p);
  unsigned int marker=(val>>24)&0xff;
  if (val==DECODE_ERROR)
   return -1;
  *q++=(val>>16)&0xff;
  if (marker<2)
   *q++=(val>>8)&0xff;
  if (marker<1)
   *q++=val&0xff;
    }
    return q-(unsigned char *) data;
}
#endif

[ 本帖最后由 zhuzhenh 于 2008-10-8 14:15 编辑 ]
QQ:122153541

TOP

字符的转换有问题吧

TOP

 
当前时区 GMT+8, 现在时间是 2008-12-5 18:57Copyright(C)上海博为峰软件技术有限公司 2001-2007 电话:021-64471599-8017
当您在访问网站、论坛及博客过程中遇到问题时可发送email:webmaster@51testing.com或发送论坛短信至管理员风在吹