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 编辑 ]