LoadRunner与encode64加密解密
来源:互联网 发布:游戏审核 知乎 编辑:程序博客网 时间:2024/05/16 14:43
今天在优化脚本的时候,发现脚本中的用户名和密码是加密显示的,如:MTg3NzQ5NzAwNjM=/。所以我直接修改用户名的值为我们平时输入的用户名,是不成功的。虽然脚本回放不会报错,但是实际登录操作不会被成功执行。
询问了一位大神,大神说要么问开发要到不同用户加密后的串,要么自己在脚本中,按照开发提供的方法,对用户名进行加密转换。
// base64加密开始 encode64-->
var keyStr = "ABCDEFGHIJKLMNOP" +"QRSTUVWXYZabcdef" +"ghijklmnopqrstuv" +"wxyz0123456789+/" + "=";
function encode64(input) {
var utput = "";
var chr1, chr2, chr3 = "";
var enc1, enc2, enc3, enc4 = "";
var i = 0;
do
{
chr1 = input.charCodeAt(i++);
chr2 = input.charCodeAt(i++);
chr3 = input.charCodeAt(i++);
enc1 = chr1 >> 2;
enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
enc4 = chr3 & 63;
if (isNaN(chr2)){
enc3 = enc4 = 64;
}else if (isNaN(chr3)){
enc4 = 64;
}
utput = output +
keyStr.charAt(enc1) +
keyStr.charAt(enc2) +
keyStr.charAt(enc3) +
keyStr.charAt(enc4);
chr1 = chr2 = chr3 = "";
enc1 = enc2 = enc3 = enc4 = "";
} while (i < input.length);
return output;
}
//- base64加密结束
这是用java写的代码,本人小白一枚,表示看不懂。而且,这个也不知道怎么用到LR中。据我所知,LR使用的语言是C语言。那么,问题来了?怎么用到LR中呢?
http://www.cnblogs.com/syxchina/archive/2010/07/25/2197388.html 还是看不懂,云里雾里。于是只能百度了。百度上有关于"LoadRunner实现Base64编解码方法" ,但是对于我这样的菜鸟来说,作者写得太简单了,看不懂。后面各种百度,综合各种博文上的说法,然后把整个过程,整理下来了,如下:
1.在LR新建一个项目,名为test
2.新建一个.h结尾的文件,例如名为“base64.h”,把下面的内容复制到这个文件中:
/*
Base 64 Encode and Decode functions for LoadRunner
==================================================
This include file provides functions to Encode and Decode
LoadRunner variables. It's based on source codes found on the
internet and has been modified to work in LoadRunner.
Created by Kim Sandell / Celarius - www.celarius.com
*/
// Encoding lookup table
char base64encode_lut[] = {
'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q',
'R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f','g','h',
'i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y',
'z','0','1','2','3','4','5','6','7','8','9','+','/','='};
// Decode lookup table
char base64decode_lut[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0,62, 0, 0, 0,63,52,53,54,55,56,57,58,59,60,61, 0, 0,
0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,
15,16,17,18,19,20,21,22,23,24,25, 0, 0, 0, 0, 0, 0,26,27,28,
29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,
49,50,51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, };
void base64encode(char *src, char *dest, int len)
// Encodes a buffer to base64
{
int i=0, slen=strlen(src);
for(i=0;i<slen && i<len;i+=3,src+=3)
{ // Enc next 4 characters
*(dest++)=base64encode_lut[(*src&0xFC)>>0x2];
*(dest++)=base64encode_lut[(*src&0x3)<<0x4|(*(src+1)&0xF0)>>0x4];
*(dest++)=((i+1)<slen)?base64encode_lut[(*(src+1)&0xF)<<0x2|(*(src+2)&0xC0)>>0x6]:'=';
*(dest++)=((i+2)<slen)?base64encode_lut[*(src+2)&0x3F]:'=';
}
*dest='/0'; // Append terminator
}
void base64decode(char *src, char *dest, int len)
// Encodes a buffer to base64
{
int i=0, slen=strlen(src);
for(i=0;i<slen&&i<len;i+=4,src+=4)
{ // Store next 4 chars in vars for faster access
char c1=base64decode_lut[*src], c2=base64decode_lut[*(src+1)], c3=base64decode_lut[*(src+2)], c4=base64decode_lut[*(src+3)];
// Decode to 3 chars
*(dest++)=(c1&0x3F)<<0x2|(c2&0x30)>>0x4;
*(dest++)=(c3!=64)?((c2&0xF)<<0x4|(c3&0x3C)>>0x2):'/0';
*(dest++)=(c4!=64)?((c3&0x3)<<0x6|c4&0x3F):'/0';
}
*dest='/0'; // Append terminator
}
int b64_encode_string( char *source, char *lrvar )
// ----------------------------------------------------------------------------
// Encodes a string to base64 format
//
// Parameters:
// source Pointer to source string to encode
// lrvar LR variable where base64 encoded string is stored
//
// Example:
//
// b64_encode_string( "Encode Me!", "b64" )
// ----------------------------------------------------------------------------
{
int dest_size;
int res;
char *dest;
// Allocate dest buffer
dest_size = 1 + ((strlen(source)+2)/3*4);
dest = (char *)malloc(dest_size);
memset(dest,0,dest_size);
// Encode & Save
base64encode(source, dest, dest_size);
lr_save_string( dest, lrvar );
// Free dest buffer
res = strlen(dest);
free(dest);
// Return length of dest string
return res;
}
int b64_decode_string( char *source, char *lrvar )
// ----------------------------------------------------------------------------
// Decodes a base64 string to plaintext
//
// Parameters:
// source Pointer to source base64 encoded string
// lrvar LR variable where decoded string is stored
//
// Example:
//
// b64_decode_string( lr_eval_string("{b64}"), "Plain" )
// ----------------------------------------------------------------------------
{
int dest_size;
int res;
char *dest;
// Allocate dest buffer
dest_size = strlen(source);
dest = (char *)malloc(dest_size);
memset(dest,0,dest_size);
// Encode & Save
base64decode(source, dest, dest_size);
lr_save_string( dest, lrvar );
// Free dest buffer
res = strlen(dest);
free(dest);
// Return length of dest string
return res;
}
之后把base64.h放置到test项目的根目录下。
1.打开test项目的脚本模式,选中Action,右键“Add Files to Script”,添加base64.h
2.打开globals.h,添加头文件Base64.h,如下:
#ifndef _GLOBALS_H
#define _GLOBALS_H
//--------------------------------------------------------------------
// Include Files
#include "lrun.h"
#include "web_api.h"
#include "lrw_custom_body.h"
#include "base64.h" //我们刚刚添加的
//--------------------------------------------------------------------
// Global Variables
#endif // _GLOBALS_H
3.使用的例子如下所示:(放到Action中运行尝试)
- LoadRunner与encode64加密解密
- LoadRunner与encode64加密解密
- LoadRunner 调用Dll完成加密解密
- LoadRunner 调用Dll完成加密解密
- LoadRunner 调用Dll完成加密解密
- LoadRunner 调用Dll完成加密解密
- LoadRunner 调用Dll完成加密解密
- LoadRunner 调用Dll完成加密解密
- 加密与解密
- 脚本加密与解密
- 加密与解密
- 加密与解密
- 加密与解密
- 数据加密与解密
- javascript加密与解密
- 数据加密与解密
- 数据加密与解密
- 加密与解密
- android设置时间回拨后让闹钟重新启动
- JavaScript 数据类型
- Codeforces Round #378 (Div. 2)题解报告
- Apache Thrift-可伸缩的跨语言服务开发框架
- IOS开发-使用Storyboard进行界面跳转及传值
- LoadRunner与encode64加密解密
- 欢迎使用CSDN-markdown编辑器
- Java基本类型注意点
- JSP笔记——JSTL标签
- activiti 快速入门--3种assignee任务分配方式(2)
- 自定义UITableViewCell(registerNib: 与 registerClass: 的区别)
- String,StringBuffer与StringBuilder的区别
- android 加载进度条动画
- Windows鼠标右键没有“新建”“新建文件夹”选项