Aller au contenu
tests-performanceRechercherCtrl K
VuGen3 min de lecture

Scripting Vugen – Encoder et Decoder en base64

Encoder et décoder en base64 dans VuGen : la fonction web_convert_from_formatted existe depuis la version 12 ; avant, il faut ajouter le fichier base64.h au script.

L’essentiel

  • Depuis VuGen 12, la fonction web_convert_from_formatted encode en base64.
  • Avant la version 12, on ajoute la librairie base64.h au script.
  • On l'ajoute par « Add Files to Script », puis par un include dans globals.h.
Sommaire
  1. Procédure

Depuis la version 12 de VUGEN il y a la fonction web_convert_from_formatted pour encoder du base 64.

Exemple :

C
web_convert_from_formatted (
     "FormattedData=Exemple",
     "TargetParam=Param",
     "Extensions=Base64",
     LAST );

Avant la version 12, il n’y avait pas de fonction interne pour encoder ou décoder du codage base64 mais il est possible d’ajouter une librairie pour effectuer ces opérations.

Procédure

Il faut copier le fichier base64.h (clic droit sur le fichier, enregistrer sous) dans le répertoire du script et l’ajouter dans Vugen.

HP Virtual User Generator, script Web (HTTP/HTML) : clic droit sur Action, menu contextuel, entrée Add Files to Script

Sélectionner : Add Files to Script

Le fichier est visible.

Arborescence du script VuGen : base64.h apparaît sous globals.h, signalé par une flèche

Sélectionner le fichier : globals.h

Ajouter la ligne : #include « base64.h »

Exemple :

Fichier globals.h : ligne #include "base64.h" ajoutée après les includes lrun.h, web_api.h et lrw_custom_body.h

Il ne reste plus qu’a ajouter une de ces 3 fonctions dans votre script en fonction de votre besoin.

C
// Pour encoder le login et mot de passe d'un utilisateur en base64 pour l'authentification

account(lr_eval_string("{User}"), lr_eval_string("{Mdp}"));

lr_output_message("Encoded: %s", lr_eval_string("{Compte}"));

 

//Encoder un String en Base64

b64_encode_string("Encode Me", "b64");

 

//Décoder du Base64

b64_decode_string(lr_eval_string("{b64}"), "Plain");

lr_output_message("Encoded: %s", lr_eval_string("{Plain}"));

Code du Fichier Base64.h (Si le téléchargement est bloqué) ## Début /* 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. Crée par : Kim Sandell Modifié par : Philippe Naveau */ // 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>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 ; } char user[128] ; char mdp[128] ; void account(char *user, char *mdp) { char cps[2048] ; *cps = NULL ; strcpy(cps, user) ; strcat(cps, « : ») ; strcat(cps, mdp) ; b64_encode_string(cps, « b64str » ) ; //lr_output_message(« Encoded: %s », lr_eval_string(« {b64str} ») ) ; lr_save_string(lr_eval_string(« {b64str} »),”Compte”) ; // return(b64str) ; } ## Fin

Dans la même catégorie.

↑ ↓ choisirEntrée ouvrirÉchap fermer