JMeter如何处理含十六进制00 NUL字符的字符串生成正确SHA-256哈希值
JMeter含NUL空字符字符串的SHA-256哈希计算解决方案
错误原因说明
你之前调用__digest函数时传入的字符串中的NUL是普通文本字符,而非真实的十六进制0x00空字符,因此哈希计算的输入和预期格式不符,导致结果错误。
方案1:直接通过Groovy函数计算(推荐)
JMeter的__groovy函数支持转义字符解析,且内置Apache Commons Codec库可直接计算SHA-256哈希,直接使用如下表达式即可得到正确结果:
${__groovy(import org.apache.commons.codec.digest.DigestUtils; DigestUtils.sha256Hex("624111" + "\0" + "2021-10-06T11:35:39-04:00" + "\0" + "s3cr3t" + "\0"),)}
输出结果与你给出的正确哈希值7c3f952cdd1d6bf56a2762c5bb94add00883654794d27344f1dd55e5901f381c完全一致。
方案2:参数化字段适配
如果Id、时间戳、盐为动态变量(例如已存为JMeter变量id、timestamp、salt),可通过vars.get()方法读取变量后拼接计算:
${__groovy( import org.apache.commons.codec.digest.DigestUtils; String content = vars.get("id") + "\0" + vars.get("timestamp") + "\0" + vars.get("salt") + "\0"; DigestUtils.sha256Hex(content); ,)}
注意事项
- 必须用转义符
\0表示真实的NUL空字符,不要手动输入"NUL"三个普通字符 - Groovy中拼接字符串时包含转义符需要用双引号包裹字符串,单引号不会解析转义逻辑
内容的提问来源于stack exchange,提问作者Narendra
相关产品推荐
相关产品推荐

