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

JMeter中使用BCrypt实现密码哈希的问题排查

在JMeter中使用BCrypt哈希加密时No such property: BCrypt异常的解决

问题背景

需求:使用BCrypt哈希生成器对任意字符串加密
已执行操作:

  • 在JMeter的Lib文件夹中添加BCrypt相关Jar包
  • 重启JMeter
  • 在JSR223 Sampler中编写以下代码:
String password = "1234"; 
String bcryptHashString = BCrypt.withDefaults().hashToString(10, password.toCharArray());

遇到的异常:

2023-10-06 13:27:53,749 ERROR o.a.j.p.j.s.JSR223Sampler: Problem in JSR223 script JSR223 Sampler, message: javax.script.ScriptException: groovy.lang.MissingPropertyException: No such property: BCrypt for class: Script228
javax.script.ScriptException: groovy.lang.MissingPropertyException: No such property: BCrypt for class: Script228
at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:320) ~[groovy-jsr223-3.0.5.jar:3.0.5]
at org.codehaus.groovy.jsr223.GroovyCompiledScript.eval(GroovyCompiledScript.java:71) ~[groovy-jsr223-3.0.5.jar:3.0.5]
at javax.script.CompiledScript.eval(Unknown Source) ~[?:1.8.0_381]
at org.apache.jmeter.util.JSR223TestElement.processFileOrScript(JSR223TestElement.java:217) ~[ApacheJMeter_core.jar:5.4.1]
at org.apache.jmeter.protocol.java.sampler.JSR223Sampler.sample(JSR223Sampler.java:72) [ApacheJMeter_java.jar:5.4.1]
at org.apache.jmeter.threads.JMeterThread.doSampling(JMeterThread.java:638) [ApacheJMeter_core.jar:5.4.1]
at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:558) [ApacheJMeter_core.jar:5.4.1]
at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:489) [ApacheJMeter_core.jar:5.4.1]
at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:256) [ApacheJMeter_core.jar:5.4.1]

问题原因

这个异常说明Groovy脚本找不到BCrypt类,常见原因有三个:

  • 引入的Jar包不是对应BCrypt库的正确版本或完整包
  • Jar包放置的目录不正确,导致JMeter未加载
  • 脚本中缺少BCrypt类的导入语句

解决步骤

1. 确认Jar包正确性

确保你下载的是正规的BCrypt Jar包,比如常用的jBCrypt库(对应类路径org.mindrot.jbcrypt.BCrypt),或者Spring Security的BCrypt实现(org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder),不要使用不兼容的第三方Jar包。

2. 检查Jar包位置

将Jar包放在JMeter安装目录下的lib文件夹中(不要放在lib/ext或其他子目录),放置完成后必须完全关闭并重新启动JMeter,确保Jar包被JMeter的类加载器识别。

3. 修改脚本添加导入语句

根据你使用的BCrypt库,在脚本开头添加对应的导入语句,以下是两种常见库的示例:

示例1:使用jBCrypt库

import org.mindrot.jbcrypt.BCrypt

String password = "1234";
// 生成哈希字符串,10是工作因子
String bcryptHashString = BCrypt.hashpw(password, BCrypt.gensalt(10));
// 可将结果存入JMeter变量供后续使用
vars.put("bcryptHash", bcryptHashString);

示例2:使用Spring Security的BCrypt实现

import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder

String password = "1234";
BCryptPasswordEncoder encoder = new BCryptPasswordEncoder(10);
String bcryptHashString = encoder.encode(password);
vars.put("bcryptHash", bcryptHashString);

4. 验证解决方案

重启JMeter后运行JSR223 Sampler,若不再抛出异常且能成功生成哈希字符串,说明问题已解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 13:52:44