作为测试 时间长了 就会慢慢接触接口 测试 ,但是碰到一些加密的接口就会感到 无从下手。想要使用接口加密 ,首先要了解  你们接口加密的原理 ,有的是淡出的 rsa 加密、有的是分段的rsa加密,而我们的接口是先经过unicode 编码 后再次进行 rsa分段加密,接下来我们说一下 用jmeter进行rsa加密接口测试

Jmeter 是一个不错的接口测试工具 。其实接口加密 jmeter为我们提供了两种 方式 :

一、使用jmeter 前置处理器 Jsr223 Processor 这个处理处理器 主要是针对与 js处理加密

Jmeter 实现RSA 接口加密(主要BeanShell 解决无效转义问题)

Jmeter 实现RSA 接口加密(主要BeanShell 解决无效转义问题)

 

第二种就是我们要说的 通过BeanShell 这种方式加密  主要是针对会Java 代码 的同学

加密 方式可以通过添加 前置处理器 BeanShell Processor 或着直接 添加 BeanShell sampler我这里直接添加了BeanShell sampler

Jmeter 实现RSA 接口加密(主要BeanShell 解决无效转义问题)

 

Jmeter 实现RSA 接口加密(主要BeanShell 解决无效转义问题)

 

import org.apache.commons.codec.binary.Base64;
import java.io.ByteArrayOutputStream;
import java.security.Key;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.Signature;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.HashMap;
import java.util.Map;
import javax.crypto.Cipher;
   public static String RSA_PUB_KEY = "公钥";
    public static String KEY_ALGORITHM = "RSA";
    public static String SIGNATURE_ALGORITHM = "MD5withRSA";
    public static int MAX_ENCRYPT_BLOCK = 85;
    public static int MAX_DECRYPT_BLOCK = 128;

    public static byte[] encryptByPublicKey(byte[] data, String publicKey)
            throws Exception {
        byte[] keyBytes = Base64.decodeBase64(publicKey);
        X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(keyBytes);
        KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
        Key publicK = keyFactory.generatePublic(x509KeySpec);
        // 对数据加密
        Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());
        cipher.init(Cipher.ENCRYPT_MODE, publicK);
        int inputLen = data.length;
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        int offSet = 0;
        byte[] cache;
        int i = 0;
        // 对数据分段加密
        while (inputLen - offSet > 0) {
            if (inputLen - offSet > MAX_ENCRYPT_BLOCK) {
                cache = cipher.doFinal(data, offSet, MAX_ENCRYPT_BLOCK);
            } else {
                cache = cipher.doFinal(data, offSet, inputLen - offSet);
            }
            out.write(cache, 0, cache.length);
            i++;
            offSet = i * MAX_ENCRYPT_BLOCK;
        }
        byte[] encryptedData = out.toByteArray();
        out.close();
        return encryptedData;
    }
               String str = "登陆接口要加密的字符串";

        StringBuffer unicode = new StringBuffer();
         for (int i = 0; i < str.length(); i++) {
                char c = str.charAt(i);
                unicode.append("\\u"+Integer.toHexString(c));
            }
          String  result = Base64.encodeBase64String(encryptByPublicKey(unicode.toString().getBytes(),RSA_PUB_KEY));
            print(unicode);
            print(result);

            vars.put("sign",result);

这个代码里添加了 对加密前的字符串 转码 

Jmeter 实现RSA 接口加密(主要BeanShell 解决无效转义问题)

        

在实现过程中 遇到了    

org.apache.jorphan.util.JMeterException: Error invoking bsh method: eval    Invalid escape character at line 95 column 34.这个问题  提示的是在 这个地方 无效的转义符  网上查找好多 资料 没有解决 办法 ,尝试了很多方法 都不管用 后来 使用 用户变量 解决这个问题  BeanShell  应用该变量 解决问题

Jmeter 实现RSA 接口加密(主要BeanShell 解决无效转义问题)

 

 

相关文章:

  • 2021-11-22
  • 2022-12-23
  • 2022-12-23
  • 2021-09-17
  • 2021-10-27
  • 2021-08-08
  • 2022-01-16
猜你喜欢
  • 2022-12-23
  • 2021-07-12
  • 2021-12-27
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案