Cómo Jmeter utiliza RSA para el cifrado


Prefacio

En las pruebas de interfaz o de rendimiento, a menudo nos encontramos con situaciones en las que es necesario cifrar los datos. Este artículo presenta principalmente el uso del cifrado RSA. El código de cifrado citado proviene de Internet. No sé qué experto lo compartió. ¡Me gustaría expresar mi gratitud!


1. Pasos de uso

1. Agregue el preprocesador BeanShell

Insertar descripción de la imagen aquí

2.Escribe un guión

El código se muestra a continuación:

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;
import java.net.URLEncoder;
String RSA_PUB_KEY = props.get("pukey");//RSA加密的公钥
String KEY_ALGORITHM = "RSA";
String SIGNATURE_ALGORITHM = "MD5withRSA";
int MAX_ENCRYPT_BLOCK = 117;
int MAX_DECRYPT_BLOCK = 128;

public static byte[] decryptByPublicKey(byte[] encryptedData, 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.DECRYPT_MODE, publicK);
    int inputLen = encryptedData.length;
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    int offSet = 0;
    byte[] cache;
    int i = 0;
    // 对数据分段解密
    while (inputLen - offSet > 0) {
    
    
        if (inputLen - offSet > MAX_DECRYPT_BLOCK) {
    
    
            cache = cipher.doFinal(encryptedData, offSet, MAX_DECRYPT_BLOCK);
        } else {
    
    
            cache = cipher.doFinal(encryptedData, offSet, inputLen - offSet);
        }
        out.write(cache, 0, cache.length);
        i++;
        offSet = i * MAX_DECRYPT_BLOCK;
    }
    byte[] decryptedData = out.toByteArray();
    out.close();
    return decryptedData;
}

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 = "12345678";//这里设置为自己的密码
String result = "";

try {
    
    
    result = Base64.encodeBase64String(encryptByPublicKey(str.getBytes(), RSA_PUB_KEY));

    result1 = encryptByPublicKey(str.getBytes(), RSA_PUB_KEY);
    System.out.println(result);
} catch(Exception e) {
    
    
    // TODO Auto-generated catch block
    e.printStackTrace();
}

print(result);
vars.put("rsa_pwd", result);//rsa_pwd是jmeter脚本中引用的变量名
return result1;

 


Análisis de código:
1. La línea 10 se completa con la clave pública de RSA.
Insertar descripción de la imagen aquí
2. La línea 81 se completa con la cadena original que debe cifrarse. Por ejemplo, si desea cifrar la contraseña, complete la contraseña aquí.
Insertar descripción de la imagen aquí

3. La línea 95 del código almacena el resultado de la cadena cifrada como una variable Jmeter para facilitar su referencia en Jmeter.
Insertar descripción de la imagen aquí


Resumir

Hablaré de lo anterior hoy. Este artículo solo presenta brevemente cómo usar RSA para el cifrado en Jmeter.

Supongo que te gusta

Origin blog.csdn.net/liangxiaoyan0426/article/details/130864278
Recomendado
Clasificación