You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JMeter使用Groovy编写RSA公钥加密脚本运行报错问题咨询

问题根因

当前报错直接触发原因是Groovy语法大小写敏感:

  • 你定义公钥规则的变量名为x509PublicKey(Key首字母大写),但调用generatePublic方法时传入的参数写为x509Publickey(key首字母小写),变量名不匹配直接抛出属性不存在的异常。

除了这个直接拼写错误,代码里还有4个隐藏问题,修正大小写后依然会运行失败:

  • 公钥字符串无效:你代码里写的公钥是随意拼接的占位字符串,不符合X509格式RSA公钥的Base64编码规范,实际使用需要替换为服务端下发的真实公钥,注意要去掉公钥头尾的-----BEGIN PUBLIC KEY-----、-----END PUBLIC KEY-----标识和所有换行符,只保留中间的Base64内容。
  • Base64编码方法名拼写错误:字节数组转Base64字符串的正确方法是encodeBase64(),你写的encodedBase64()多了一个字母d,运行时会抛出方法不存在异常。
  • 加密算法未指定填充模式:直接写Cipher.getInstance('RSA')会使用JDK默认的填充模式,不同JDK版本、不同服务商实现的默认值不一致,大概率出现服务端无法解密的问题,需要明确指定通用填充规则。
  • 明文中的转义字符未处理:代码里的"是HTML转义的双引号,实际加密时要替换为真实的双引号,否则加密后的内容会包含多余转义字符,和服务端预期明文不匹配。
修正后可直接运行的代码
import javax.crypto.Cipher
import java.security.KeyFactory
import java.security.spec.X509EncodedKeySpec
import org.apache.commons.codec.binary.Base64

// 替换为去除头尾标识、换行后的真实RSA公钥Base64字符串
def publicKeyContent = '替换为你的真实公钥内容'
X509EncodedKeySpec pubKeySpec = new X509EncodedKeySpec(Base64.decodeBase64(publicKeyContent))
KeyFactory keyFactory = KeyFactory.getInstance("RSA")
def publicKey = keyFactory.generatePublic(pubKeySpec)

// 待加密明文,已替换HTML转义字符为真实双引号
def plainContent = '("testinga@gmail.com|testingb@gmail.com").'
// 明确指定加密算法、工作模式、填充规则,避免跨环境兼容问题
Cipher encryptCipher = Cipher.getInstance("RSA/ECB/PKCS1Padding")
encryptCipher.init(Cipher.ENCRYPT_MODE, publicKey)
byte[] encryptedBytes = encryptCipher.doFinal(plainContent.getBytes("UTF-8"))
// 正确调用Base64编码方法
def encryptedResult = Base64.encodeBase64String(encryptedBytes)
vars.put("encodedMessage", encryptedResult)
额外排错提示
  • 如果替换真实公钥后抛出InvalidKeySpecException,先检查公钥格式:如果拿到的公钥开头是-----BEGIN RSA PUBLIC KEY-----,说明是PKCS#1格式,Java原生KeyFactory不支持直接解析,需要先转换为X509格式后再使用。
  • RSA加密有明文长度限制:2048位密钥搭配PKCS1Padding时,单次最大加密明文长度为245字节,如果待加密内容超过长度,需要做分段加密处理。

内容的提问来源于stack exchange,提问作者Sri Ganesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 22:40:50