jmeter: 用户登录使用RSA加密的实现过程(通过脚本加密密码)

用户登录前,添加一个前置处理器进行RSA加密。

RSA加密脚本:

import java.security.KeyFactory
import java.security.PublicKey
import java.security.spec.X509EncodedKeySpec
import javax.crypto.Cipher
import java.util.Base64

// 假设publicKey变量包含了Base64编码的公钥字符串
String base64PublicKey = vars.get("publicKey"); // 从JMeter变量中获取公钥
log.info("-----获取到的公钥为------: " + base64PublicKey);

// 将Base64编码的公钥字符串解码为字节数组
byte[] encodedPublicKeyBytes = Base64.getDecoder().decode(base64PublicKey);

// 使用X.509格式将公钥字节数组转换为KeySpec
X509EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(encodedPublicKeyBytes);

// 获取RSA密钥工厂实例
KeyFactory kf = KeyFactory.getInstance("RSA");

// 生成PublicKey对象
PublicKey pubKey = kf.generatePublic(publicKeySpec);

// 初始化Cipher对象,设置为加密模式,并使用"RSA/ECB/PKCS1Padding"作为转换模式(根据需要调整)
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.ENCRYPT_MODE, pubKey);

// 获取CSV文件的参数值:获取密码
String dataToEncrypt = vars.get("pwd");

//日志控制台输出打印获取到的CSV文件变量值
log.info("------CSV文件中的变量值为-----: " + dataToEncrypt);

// 加密字符串(需要转换为字节数组)
// 注意:对于长字符串,你可能需要使用OAEPWithSHA-256AndMGF1Padding或分段加密
byte[] encryptedBytes = cipher.doFinal(dataToEncrypt.getBytes("UTF-8"));

// 将加密后的字节数组转换为Base64字符串
String encryptedData = Base64.getEncoder().encodeToString(encryptedBytes);

// 将加密后的数据存储在JMeter变量中以便后续使用
vars.put("encryptedValue", encryptedData);

// 输出加密后的数据到JMeter日志中(可选)
log.info("------加密后的密文为-----: " + encryptedData);

 

posted @ 2025-07-07 10:02  羊孩  阅读(111)  评论(0)    收藏  举报
返回顶端