侧边栏壁纸
博主头像
一朵云的博客博主等级

拥抱生活,向阳而生。

  • 累计撰写 68 篇文章
  • 累计创建 25 个标签
  • 累计收到 7 条评论

目 录CONTENT

文章目录

JMeter -- 压测脚本之AES加解密

一朵云
2022-04-18 / 2 评论 / 7 点赞 / 69036 阅读 / 5676 字

前言:

  接口出于安全考虑,开发经常会对接口传输参数进行MD5、AES等方式加密,故而,这里记录下我是怎么通过jmeter去处理AES加密的。

什么是AES加密:

  AES高级加密标准,在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。AES是一种对称性加密方式。

目标:

  进行账号注册操作,接口的请求内容需要进行AES加密,响应内容需要进行AES解密。

操作:

  1、定义一个BeanShell 预处理程序“requestParams”,主要用于存放请求参数。(String存放字符串,json串中的双引号需要加个/)

image.png

  2、定义一个BeanShell 预处理程序处理请求参数的加密。(这里调用了个我自己封装的jar,是用来处理AES加密的,后面会提及)

image.png

  3、在HTTP请求中引用加密后的请求参数“enString”。

image.png

  4、定义一个BeanShell 后置处理程序处理响应参数的解密。(同样是通过我自个封装的jar来处理AES的解密)

image.png

  5、添加一个响应断言,用于判断响应是否成功。

image.png

  以上就是jmeter进行AES加密请求参数、解密响应参数的基本过程。下面我将介绍下我的AES加解密工具jar。


import org.apache.commons.codec.binary.Base64;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;

public class AES {

    private Cipher encrypt;
    private Cipher decrypt;

    /**
     * 通过aes key进行构造函数初始化
     * @param key
     */
    public AES(String key){

        if (key == null || key.length() != 16) {
            throw new RuntimeException("key must 16 chars");
        }
        try {
            byte[] encryptRaw = key.getBytes("ASCII");
            SecretKeySpec encryptsKeySpec = new SecretKeySpec(encryptRaw, "AES");
            encrypt = Cipher.getInstance("AES");
            encrypt.init(Cipher.ENCRYPT_MODE, encryptsKeySpec);

            byte[] decryptRaw = key.getBytes("ASCII");
            SecretKeySpec decryptsKeySpec = new SecretKeySpec(decryptRaw, "AES");
            decrypt = Cipher.getInstance("AES");
            decrypt.init(Cipher.DECRYPT_MODE, decryptsKeySpec);
        } catch (Exception e) {
            throw new RuntimeException(e.getMessage());
        }
    }

    /**
     * 加密
     * @param ssrc 需加密的字符串
     * @return
     */
    public String encryptString(String ssrc) {
        try {
            byte[] encrypted = encrypt.doFinal(ssrc.getBytes("utf-8"));
            return Base64.encodeBase64String(encrypted);
        } catch (Exception e) {
            throw new RuntimeException(e.getMessage());
        }
    }

    /**
     * 解密
     * @param sSrc 需解密的byte[]数组(针对jmeter的prev.getResponseData()来接参)。
     * @return
     */
    public String decryptString(byte[] sSrc) {
        try {
            byte[] original = decrypt.doFinal(sSrc);
            return new String(original,"utf-8");
        } catch (Exception e) {
            throw new RuntimeException(e.getMessage());
        }
    }

}

  可以使用下列代码进行调试:

import com.dc.tool.AES;
import org.apache.commons.codec.binary.Base64;
import java.io.UnsupportedEncodingException;

/**
 * @author xcj
 * @date 2022/4/19 17:18
 */
public class Main {

    public static void main(String[] args) throws UnsupportedEncodingException {
        AES aes = new AES("0111222333444555");
        String s = aes.encryptString("测试22337777777777777777777777");
        String s1 = aes.decryptString(Base64.decodeBase64(s));
        System.out.println(s);
        System.out.println(s1);
    }
}

  编写完成如上代码后,需进行打jar包操作

1、选择 “Open Module Setting”

image.png

2、选择 “Artifacts”进行如下如的配置

企业微信截图_16503607758174.png

3、勾选 “Include in project build”

image.png

4、进行 “Build Project”

image.png

5、查看是否成功生成 jar

image.png

7

评论区