JMeter如何生成SHA512哈希值

4

我需要在JMeter中创建测试多个请求的脚本。我需要创建一个包含pass的POST请求,在请求头中应该使用哈希sha512算法来加密user+someid+someid。为了在每个请求中更改用户,我只需在Header Manager中添加user${__threadNum},这看起来很不错,但是我需要在下一个POST请求中从中生成哈希值。我搜索到可以通过beanshell脚本或jsr223前处理器实现此操作,但我对脚本编写或Java不太熟悉。


你可以使用BeanShell通过Bash命令来获取哈希值,类似于echo -n "test" | openssl sha512 - marekful
2个回答

3

如果您使用JMeter版本大于等于4.0,只需使用函数__digest

${__digest(SHA-512,要哈希的字符串,,,)}


这似乎想要在脚本文件上设置一个属性。你如何获取输出? - ssmith
1
在类Script60中,不存在属性a600410b157b2648e5be914bfe7f1466c4249b2d63b227861209b6a68d75274e。 - ssmith

2

从JMeter 4.0版本开始,更容易的答案是:

对于早期版本:

使用Java语言添加JSR223 Sampler,通过 vars.get("password") 传递变量密码和salt,使用此代码变量 generatedPassword 将保存新生成的哈希值。

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

String passwordToHash = vars.get("password");
String   salt= vars.get("salt");
String generatedPassword = null;
    try {
     MessageDigest md = MessageDigest.getInstance("SHA-512");
     md.update(salt.getBytes("UTF-8"));
     byte[] bytes = md.digest(passwordToHash.getBytes("UTF-8"));
     StringBuilder sb = new StringBuilder();
     for(int i=0; i< bytes.length ;i++){
        sb.append(Integer.toString((bytes[i] & 0xff) + 0x100, 16).substring(1));
     }
     generatedPassword = sb.toString();
     log.info(generatedPassword);
     vars.put("generatedPassword", generatedPassword);
    } 
   catch (NoSuchAlgorithmException e){
    e.printStackTrace();
   }

谢谢,但我还是有点困惑...在JSR223预处理器的参数中应该把vars.get("password")放在哪里?在用户参数中定义密码为${user}${someid}${someid}还是怎么样?然后我可以使用${generatedPassword}吗? - vb381
在JMeter中定义变量password,例如在用户参数中,其值为${user}${someid}${someid},最后使用${generatedPassword} - user7294900
我尝试了这个,但是响应中仍然只能看到${generatedPassword}而不是哈希值。 - vb381
将您的测试计划添加到问题中,可能是顺序错误,请检查jmeter.log是否出现任何错误。 - user7294900
在用户参数中,我有以下内容:user: user123 someid: id123 someid2: id12345 password: ${user}${someid}${someid2}在JSR223预处理器中,我已经写了一些代码,然后使用Header Manager添加了一个头部:user${__threadNum}: ${generatedPassword}但是在请求头中,我只看到了user1: ${generatedPassword}。这个设置正确吗?我会检查日志或者改变顺序... - vb381
好的,问题是salt没有定义,现在它已经正常工作了。非常感谢。 - vb381

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接