jmeter 參數AES加密【BeanShell PreProcessor】

在Jmeter平常實踐中,你們應該都遇到過接口傳參須要加密的狀況。以登錄爲例,用戶名和密碼通常都須要進行加密傳輸,在服務端再進行解密,這樣安全係數會更高,但在使用jmeter進行接口測試的時候,怎樣發送加密的參數呢,下面以AES加密爲例,來示範一下如何在jmeter中對參數進行加密。本教程較爲初級,有高級的請繞路~java

  • 打成jar包導入

1、AES加密算法調試(java+myeclipse)算法

首先要準備一個AES算法類,並調試算法是否可用,我是在網上找的代碼,調試可用以後導出的jar包,詳解一下步驟apache

一、在myeclipse中新建一個java工程,我命名爲了jmeterTest,能夠看到jmeterTest下有src這個文件夾。而後在src文件夾下新建一個包,我命名爲了AES。此時的包AES是空的,而後要在AES包中建立一個java類,我命名爲了AESUtil安全

 

二、java類已經建立好了,如今要在類中添加代碼了,添加下面這段AES加密算法以後,選擇工程build path將包導入到工程中就能夠了。根據main函數中的調用來測試一下你的程序加密是否是好用。dom

 1 package AES;
 2  
 3 import java.security.NoSuchAlgorithmException;
 4 import java.security.SecureRandom;
 5 import java.util.logging.Level;
 6 import java.util.logging.Logger;
 7 import javax.crypto.Cipher;
 8 import javax.crypto.KeyGenerator;
 9 import javax.crypto.SecretKey;
10 import javax.crypto.spec.SecretKeySpec;
11 import org.apache.commons.codec.binary.Base64;
12  
13 /**
14  * @version V1.0
15  * @desc AES 加密工具類
16  */
17 public class AESUtil {
18     private static String key = "hgfjhgfjsf";//此處的密匙,能夠找開發同事提供,我瞎編了一個,要根據實際項目來
19     private static final String KEY_ALGORITHM = "AES";
20     private static final String DEFAULT_CIPHER_ALGORITHM = "AES/ECB/PKCS5Padding";//默認的加密算法
21     /**
22      * AES 加密操做
23      *
24      * @param content 待加密內容
25      * @param password 加密密碼
26      * @return 返回Base64轉碼後的加密數據
27      */
28     public static String encrypt(String src) {
29         // 判斷密鑰是否爲空
30         if (key == null) {
31             System.out.print("密鑰不能爲空");
32             return null;
33         }
34         try {
35             SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes("utf-8"), "AES");
36             Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");    // 算法/模式/補碼方式 
37             cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
38             byte[] encrypted = cipher.doFinal(src.getBytes("utf-8"));
39             return new Base64().encodeToString(encrypted);//base64
40 //            return binary(encrypted, 16); //十六進制
41         } catch (Exception ex) {
42             Logger.getLogger(AESUtil.class.getName()).log(Level.SEVERE, null, ex);
43         }
44  
45         return null;
46     }
47  
48     public static void main(String[] args) {
49 //用來測試加密後的字符串,我測試的是「1234」
50         String s = "1234";
51         System.out.println("s:" + s);
52         String s1 = AESUtil.encrypt(s);
53         System.out.println("s1:" + s1);        
54     }
55  
56 }

三、程序調試完畢以後,須要導出jar包,選中AES包,右擊Exoprt,選擇Runnable JAR File導出便可,至此我要在jmeter中使用的jar包就準備好了。eclipse

 

 

2、在jmeter中導入jar包,在須要進行參數加密的請求中添加BeanShell PreProcessor函數

 

 

代碼以下【注意在調用傳參有誤時會報錯:ERROR o.a.j.u.BeanShellInterpreter: Error invoking bsh method】:工具

 1 //導入加密類,在測試計劃中已經導入jar包
 2 import AES.AESUtil; 
 3 
 4 //獲取登錄接口的用戶名參數,我以前將username和password存放在用戶變量中,在此要拿出用戶變量分別賦值給name和password
 5 String name = vars.get("username");
 6 String password = vars.get("password");
 7 
 8 //將name和password進行加密後分別賦值給aesName和aesPassword
 9 String aesName = AESUtil.encrypt(name);
10 String aesPassword = AESUtil.encrypt(password);
11 
12 //將加密後的用戶名和密碼分別放入aesname和aespwd中,aesname和aespwd能夠在jmeter中經過${}方式直接引用
13 vars.put("aesusername",aesName);
14 vars.put("aespwd",aesPassword);

 


3、jmeter引用,查看結果數中查看一下本身的用戶名和密碼參數是否加密了呢?這樣就完成了對jmeter參數進行加密的過程。測試

 

  •  編譯成class引用

1、編譯class。執行命令javac AESUtil.java 編譯成AESUtil.classui

2、在jmeter中導入class,在須要進行參數加密的請求中添加BeanShell PreProcessor

1 addClassPath("E:\\AESUtil.class");
2 import AES.AESUtil;
3 /*
4 *其餘腳本
5 */

如圖:

3、其他操做參考上邊導jar部分

 

--------------------- 原做者:Beauty_shimei 原文:https://blog.csdn.net/beauty_shimei/article/details/80288922

相關文章
相關標籤/搜索