【LoadRunner】解决HTTP请求中传参的base64加密方法

来源:互联网 发布:苹果手机怎么清除游戏数据 编辑:程序博客网 时间:2024/06/05 04:55

base64加密 

         此方法是通过某大神提供的方法,并结合在某个项目中实践得出。测试背景:在开发及优化LR脚本时,发现web请求中参数的传参值涉及到了base64加密方法,于是在网上找到很多种方法,但经过一一实践验证,发现都是徒劳,最终找到了一个方法,由于当时急于解决脚本,未及时记录哪位大神的博客地址,故将自己的项目实践过程中操作编写出来,希望能帮助更多遇到此问题的朋友。

参数化的值,如:GUID={97FD2AD5-1C5E-43F6-8314-FC980CE54FBC}

void GetBase64Encode(const char* in_str,char* out_str)//加密方法
{
    static unsigned char base64[]

="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
    int curr_out_len = 0;
    int i = 0;
    int in_len = strlen(in_str);
    unsigned char a, b, c;
    out_str[0] = '\0';
    if (in_len > 0)
    {
       while (i < in_len)
       {
        a = in_str[i];
        b = (i + 1 >= in_len) ? 0 : in_str[i + 1];
        c = (i + 2 >= in_len) ? 0 : in_str[i + 2];
        if (i + 2 < in_len)
        {
         out_str[curr_out_len++] = (base64[(a >> 2) & 0x3F]);
         out_str[curr_out_len++] = (base64[((a << 4) & 0x30) + ((b >> 4) & 0xf)]);
         out_str[curr_out_len++] = (base64[((b << 2) & 0x3c) + ((c >> 6) & 0x3)]);
         out_str[curr_out_len++] = (base64[c & 0x3F]);
        }
        else if (i + 1 < in_len)
        {
         out_str[curr_out_len++] = (base64[(a >> 2) & 0x3F]);
         out_str[curr_out_len++] = (base64[((a << 4) & 0x30) + ((b >> 4) & 0xf)]);
         out_str[curr_out_len++] = (base64[((b << 2) & 0x3c) + ((c >> 6) & 0x3)]);
         out_str[curr_out_len++] = '=';
        }
        else
        {
         out_str[curr_out_len++] = (base64[(a >> 2) & 0x3F]);
         out_str[curr_out_len++] = (base64[((a << 4) & 0x30) + ((b >> 4) & 0xf)]);
         out_str[curr_out_len++] = '=';
         out_str[curr_out_len++] = '=';
        }
        i += 3;
       }
       out_str[curr_out_len] = '\0';
    }
}


Action()
{

    char * take;
    char * toke;
    char res[512];

    take=(char *)strtok(lr_eval_string("{GUID}"),"{");//格式化“{”字符串

    toke=(char *)strtok(take,"}");//格式化“}”字符串,并将值存入toke中

    lr_error_message("GUID: %s",toke);
 
    GetBase64Encode(toke,res);//调用base64函数

    lr_output_message(res);

    return 0;
}

备注:其实此方法借鉴了《在LoadRunner中编写C函数》的其中一个方法