{"id":777,"date":"2018-07-13T10:17:30","date_gmt":"2018-07-13T08:17:30","guid":{"rendered":"https:\/\/www.tests-performance.fr\/?p=777"},"modified":"2018-07-25T13:50:15","modified_gmt":"2018-07-25T11:50:15","slug":"scripting-vugen-encoder-et-decoder-en-base64","status":"publish","type":"post","link":"https:\/\/www.tests-performance.fr\/?p=777","title":{"rendered":"Scripting Vugen &#8211; Encoder et Decoder en base64"},"content":{"rendered":"<p>Depuis la version 12 de VUGEN il y a la fonction\u00a0web_convert_from_formatted pour encoder du base 64.<\/p>\n<p>Exemple :<\/p>\n<pre>web_convert_from_formatted\u00a0(\r\n     \"FormattedData=Exemple\",\r\n     \"TargetParam=<strong>Param<\/strong>\",\r\n     \"Extensions=<strong>Base64<\/strong>\",\r\n     <strong>LAST<\/strong>\u00a0);\r\n<\/pre>\n<p>Avant la version 12, il n&#8217;y avait pas de fonction interne pour encoder ou d\u00e9coder du codage base64 mais il est possible\u00a0d&#8217;ajouter une librairie pour effectuer ces op\u00e9rations.<\/p>\n<h4>Proc\u00e9dure<\/h4>\n<p>Il faut copier le fichier\u00a0<a href=\"https:\/\/www.tests-performance.fr\/wp-content\/uploads\/2018\/07\/base64.h\">base64.h<\/a>\u00a0(clic droit sur le fichier, enregistrer sous) dans le r\u00e9pertoire du script et l&#8217;ajouter dans\u00a0<span class=\"ephox-cram-annotation-wrap ephox-cram_575092789481531469834372\" aria-invalid=\"spelling\" data-ephox-cram-highlight-id=\"ephox-cram_575092789481531469834372\" data-ephox-cram-annotation=\"Vugen\" data-ephox-cram-lingo=\"fr\">Vugen<\/span>.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"556\" height=\"536\" class=\"alignnone wp-image-786\" src=\"https:\/\/www.tests-performance.fr\/wp-content\/uploads\/2018\/07\/1.jpg\" alt=\"\" srcset=\"https:\/\/www.tests-performance.fr\/wp-content\/uploads\/2018\/07\/1.jpg 556w, https:\/\/www.tests-performance.fr\/wp-content\/uploads\/2018\/07\/1-300x289.jpg 300w\" sizes=\"auto, (max-width: 556px) 100vw, 556px\" \/><\/p>\n<p>S\u00e9lectionner :\u00a0<strong>Add Files to Script<\/strong><\/p>\n<p><strong><img decoding=\"async\" src=\"https:\/\/www.tests-performance.fr\/wp-content\/uploads\/2018\/07\/2.jpg\" \/><\/strong><\/p>\n<p>Le fichier est visible.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.tests-performance.fr\/wp-content\/uploads\/2018\/07\/3.jpg\" \/><\/p>\n<p>S\u00e9lectionner le fichier :\u00a0<strong>globals.h<\/strong><\/p>\n<p><strong><img decoding=\"async\" src=\"https:\/\/www.tests-performance.fr\/wp-content\/uploads\/2018\/07\/4.jpg\" \/><\/strong><\/p>\n<p>Ajouter la ligne :\u00a0<strong>#include &#8220;base64.h&#8221;<\/strong><\/p>\n<p><u>Exemple :<\/u><\/p>\n<p><u><img decoding=\"async\" src=\"https:\/\/www.tests-performance.fr\/wp-content\/uploads\/2018\/07\/5.jpg\" \/><\/u><\/p>\n<p>Il ne reste plus qu&#8217;a ajouter une de ces 3 fonctions dans votre script en fonction de votre besoin.<\/p>\n<pre><strong>\/\/ Pour encoder le login et mot de passe d'un utilisateur en base64 pour l'authentification<\/strong>\r\n\r\naccount(lr_eval_string(\"{User}\"), lr_eval_string(\"{Mdp}\"));\r\n\r\nlr_output_message(\"Encoded: %s\", lr_eval_string(\"{Compte}\"));\r\n\r\n\u00a0\r\n\r\n<strong>\/\/Encoder un String en Base64<\/strong>\r\n\r\nb64_encode_string(\"Encode Me\", \"b64\");\r\n\r\n\u00a0\r\n\r\n<strong>\/\/D\u00e9coder du Base64<\/strong>\r\n\r\nb64_decode_string(lr_eval_string(\"{b64}\"), \"Plain\");\r\n\r\nlr_output_message(\"Encoded: %s\", lr_eval_string(\"{Plain}\"));<\/pre>\n<hr \/>\n<p>Code du Fichier Base64.h (Si le t\u00e9l\u00e9chargement est bloqu\u00e9) <strong>## D\u00e9but<\/strong> \u00a0 \/* Base 64 Encode and Decode functions for LoadRunner ================================================== This include file provides functions to Encode and Decode LoadRunner variables. It&#8217;s based on source codes found on the internet and has been modified to work in LoadRunner. Cr\u00e9e par : Kim Sandell Modifi\u00e9 par : Philippe Naveau *\/ \/\/ Encoding lookup table char base64encode_lut[] = { &#8216;A&#8217;,&#8217;B&#8217;,&#8217;C&#8217;,&#8217;D&#8217;,&#8217;E&#8217;,&#8217;F&#8217;,&#8217;G&#8217;,&#8217;H&#8217;,&#8217;I&#8217;,&#8217;J&#8217;,&#8217;K&#8217;,&#8217;L&#8217;,&#8217;M&#8217;,&#8217;N&#8217;,&#8217;O&#8217;,&#8217;P&#8217;,&#8217;Q&#8217;, &#8216;R&#8217;,&#8217;S&#8217;,&#8217;T&#8217;,&#8217;U&#8217;,&#8217;V&#8217;,&#8217;W&#8217;,&#8217;X&#8217;,&#8217;Y&#8217;,&#8217;Z&#8217;,&#8217;a&#8217;,&#8217;b&#8217;,&#8217;c&#8217;,&#8217;d&#8217;,&#8217;e&#8217;,&#8217;f&#8217;,&#8217;g&#8217;,&#8217;h&#8217;, &#8216;i&#8217;,&#8217;j&#8217;,&#8217;k&#8217;,&#8217;l&#8217;,&#8217;m&#8217;,&#8217;n&#8217;,&#8217;o&#8217;,&#8217;p&#8217;,&#8217;q&#8217;,&#8217;r&#8217;,&#8217;s&#8217;,&#8217;t&#8217;,&#8217;u&#8217;,&#8217;v&#8217;,&#8217;w&#8217;,&#8217;x&#8217;,&#8217;y&#8217;, &#8216;z&#8217;,&#8217;0&#8242;,&#8217;1&#8242;,&#8217;2&#8242;,&#8217;3&#8242;,&#8217;4&#8242;,&#8217;5&#8242;,&#8217;6&#8242;,&#8217;7&#8242;,&#8217;8&#8242;,&#8217;9&#8242;,&#8217;+&#8217;,&#8217;\/&#8217;,&#8217;=&#8217;}; \/\/ 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&gt;0x2]; *(dest++)=base64encode_lut[(*src&amp;0x3)&lt;&lt;0x4|(*(src+1)&amp;0xF0)&gt;&gt;0x4]; *(dest++)=((i+1)&lt;slen)?base64encode_lut[(*(src+1)&amp;0xF)&lt;&lt;0x2|(*(src+2)&amp;0xC0)&gt;&gt;0x6]:&#8217;=&#8217;; *(dest++)=((i+2)&lt;slen)?base64encode_lut[*(src+2)&amp;0x3F]:&#8217;=&#8217;; } *dest=&#8217;\\0&#8242;; \/\/ 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&lt;slen&amp;&amp;i&lt;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&amp;0x3F)&lt;&lt;0x2|(c2&amp;0x30)&gt;&gt;0x4; *(dest++)=(c3!=64)?((c2&amp;0xF)&lt;&lt;0x4|(c3&amp;0x3C)&gt;&gt;0x2):&#8217;\\0&#8242;; *(dest++)=(c4!=64)?((c3&amp;0x3)&lt;&lt;0x6|c4&amp;0x3F):&#8217;\\0&#8242;; } *dest=&#8217;\\0&#8242;; \/\/ Append terminator } int b64_encode_string( char *source, char *lrvar ) \/\/ &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- \/\/ 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( &#8220;Encode Me!&#8221;, &#8220;b64&#8221; ) \/\/ &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- { 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 &amp; 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 ) \/\/ &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- \/\/ 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(&#8220;{b64}&#8221;), &#8220;Plain&#8221; ) \/\/ &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- { 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 &amp; 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, &#8220;:&#8221;); strcat(cps, mdp); b64_encode_string(cps, &#8220;b64str&#8221; ); \/\/lr_output_message(&#8220;Encoded: %s&#8221;, lr_eval_string(&#8220;{b64str}&#8221;) ); lr_save_string(lr_eval_string(&#8220;{b64str}&#8221;),&#8221;Compte&#8221;); \/\/ return(b64str); } <strong>## Fin<\/strong><\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Depuis la version 12 de VUGEN il y a la fonction\u00a0web_convert_from_formatted pour encoder du base 64. Exemple : web_convert_from_formatted\u00a0( &#8220;FormattedData=Exemple&#8221;, &#8220;TargetParam=Param&#8221;, &#8220;Extensions=Base64&#8221;, LAST\u00a0); Avant la version 12, il n&#8217;y avait pas de fonction interne pour encoder ou d\u00e9coder du codage base64 mais il est possible\u00a0d&#8217;ajouter une librairie pour effectuer ces op\u00e9rations. Proc\u00e9dure Il faut copier [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[21],"tags":[27],"class_list":["post-777","post","type-post","status-publish","format-standard","hentry","category-vugen","tag-tests-de-performance"],"acf":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tests-performance.fr\/index.php?rest_route=\/wp\/v2\/posts\/777","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tests-performance.fr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tests-performance.fr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tests-performance.fr\/index.php?rest_route=\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tests-performance.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=777"}],"version-history":[{"count":22,"href":"https:\/\/www.tests-performance.fr\/index.php?rest_route=\/wp\/v2\/posts\/777\/revisions"}],"predecessor-version":[{"id":1174,"href":"https:\/\/www.tests-performance.fr\/index.php?rest_route=\/wp\/v2\/posts\/777\/revisions\/1174"}],"wp:attachment":[{"href":"https:\/\/www.tests-performance.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=777"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tests-performance.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=777"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tests-performance.fr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=777"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}