JMeter BeanShell SHA-256不同的哈希值

时间:2017-11-03 16:51:35

标签: jmeter sha256 beanshell

我正在调用一个需要带有请求正文哈希值的http头的api serice。

我试图在JMeter中使用beanshell post处理器来自动创建请求体的sha-256哈希。哈希值是正确的,直到我在请求体中引入换行符(这是一个痛苦,因为JSON消息跨越几行!)

我认为这与隐藏的角色有关,但我可以解决出错的问题! :(

当我将JMeter生成的哈希值与单独的哈希生成器工具进行比较时,它是完全匹配的,直到有换行符,然后JMeter是错误的。

为什么JMeter会在换行时生成错误的哈希?

我的代码是:

[import org.apache.commons.httpclient.auth.DigestScheme; // necessary imports
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.jmeter.protocol.http.control.Header;
import org.apache.jmeter.services.FileServer;
import javax.xml.bind.DatatypeConverter;
import java.security.*;

String body = sampler.getArguments().getArgument(0).getValue();
String hash = DigestUtils.sha256Hex(body);
log.info(hash);

1 个答案:

答案 0 :(得分:0)

您的输入数据是什么?您期望输出什么?

JMeter 3.1 it is recommended to switch to JSR223 Test Elements and Groovy language以来:

  1. 鉴于以下请求正文:

    {
        "foo": "bar"
    }
    
  2. 下一个生成SHA-256十六进制字符串的Groovy代码:

    def sha256Hex = { input ->  
      java.security.MessageDigest.getInstance("SHA-256")   
        .digest(input.getBytes("UTF-8")).encodeHex().toString()  
    }
    log.info(sha256Hex(sampler.getArguments().getArgument(0).getValue()))
    
  3. 我得到dbc67f71c921b5b7649481a5123d94dfa919748d2962889681d96438033c548f值,这与我使用https://hash.online-convert.com/sha256-generator生成器看到的基本相同。