使用jmeter對字串進行加密

2022-01-11 10:31:12 字數 2533 閱讀 9800

之前介紹過如何利用jmeter函式助手構造時間戳引數,本次再來研究下另乙個功能:對字串進行加密

下面通過乙個例子來演示一下如何對請求引數進行md5加密

介面文件如下

一些說明

1、簽名是為了保證呼叫安全,使用md5演算法生成的一段字串,生成的簽名長度為 32位,簽名中的英文本元均為小寫格式;

2、為保證翻譯質量,請將單次請求長度控制在 6000 bytes以內。(漢字約為2000個);

3、簽名生成方法如下:

(2)對字串1做md5,得到32位小寫的sign

請求引數:

q

from = en

to = zh

salt = 1435660288

平台分配的金鑰:

12345678

生成sign:

sign=f89f9594663708c1605f3d736d01d2d4

完整請求為:

//先把介面引數錄入到jmeter

我目前用的jmeter版本是5.0,當前版本的函式助手中有2個函式可以實現字串加密的功能:__digest__md5

谷歌硬核翻譯:

digest algorithm:加密演算法,可以填寫上圖所示的那些,如md2、md5等

string to be hashed:把需要加密的字串填寫到這裡

後面3個引數是選填

如果按照當前寫死的引數來進行加密的話,string to be hashed處應該填寫:2015063000000001+鋼鐵俠+1435660288+12345678,如下

這樣就生成了乙個加密字串,把它填寫到sign處就好了

但是有一點必須注意,在引數中:q代表需要翻譯的字元,salt是乙個隨機數,這兩個引數都是動態變化的(因為每次翻譯的字元不同、每次生成的隨機數也不同)

所以在生成sign加密字串時,不能用寫死的q 和 salt

在實際執行時,得不到正確的響應結果,總是提示sign不合法(猜測可能在函式助手中不能引用外部變數,或者是引用的方式不對,總之這個方法我沒有走通)

__md5函式也存在這個問題,不再做贅述

網上衝浪一番後找到了另一種實現方式:使用beanshell指令碼對字串md5加密

針對這個翻譯介面,做一下如下改造

1、在請求前新增乙個配置元件:【使用者定義的變數】,把可能變化的請求引數加到裡面

2、在請求下面新增乙個beanshell preprocessor,裡面的指令碼如下

第三行表示定義乙個變數msign,並把加密後的字串傳給msign

3、在http請求中引用這些定義好的引數變數

執行一下檢視結果

請求內容

響應結果

說明生成的加密字串是合法能用的

有興趣可以看看這篇:介紹了多種生成加密字串的方法

使用Hashtable對字串進行碰撞

1.在一些字串陣列中,常會有重複的記錄,比如手機號碼,我們可以通過hashtable來對其進行過濾 public string checkarray string str return str new 示例 string mobile mobile checkarray mobile for int...

對字串進行排序

給三個字串,對它們進行排序,之前寫過對三個數排序,定義乙個中間變數,a,b,c依次比較,如果不是順序,就用臨時變數對它們進行交換。字串也可以用這樣的方法進行排序。void sort const char a,const char b,const char c 字串不能被修改,應該用const修飾 i...

對字串進行操作

建立字串是通過一對雙引號 或使用函式as.character 來完成的。string c one two three string 1 one two three as.character 1 3 1 1 2 3 函式noquote 可用來抑制r的輸出結果中雙引號的顯示。noquote string...