如何在 Groovy 2.4 中计算 sha256 哈希

How to calculate sha256 hash in Groovy 2.4

我正在尝试计算 Groovy 版本 2.4.16 中的 sha256 哈希。这是 jmeter 测试的一部分,这是它支持的 Groovy 版本,我认为我无法更改它。我知道 in Groovy 2.5 you can use code like this:

def challenge = verifier.digest('SHA-256');
log.info 'challenge' + challenge

但这在 2.4 中并不 work/exist。我如何在 Groovy 2.4 中执行此操作?

我用上面的代码得到的错误是:

javax.script.ScriptException: groovy.lang.MissingMethodException: No signature of method: java.lang.String.digest() is applicable for argument types: (java.lang.String) values: [SHA-256]
Possible solutions: getAt(java.lang.String), next(), size(), toSet(), size(), toList()
    at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:324) ~[groovy-all-2.4.16.jar:2.4.16]
    at org.codehaus.groovy.jsr223.GroovyCompiledScript.eval(GroovyCompiledScript.java:72) ~[groovy-all-2.4.16.jar:2.4.16]
    at javax.script.CompiledScript.eval(Unknown Source) ~[?:1.8.0_221]
    at org.apache.jmeter.util.JSR223TestElement.processFileOrScript(JSR223TestElement.java:223) ~[ApacheJMeter_core.jar:5.1.1 r1855137]
    at org.apache.jmeter.modifiers.JSR223PreProcessor.process(JSR223PreProcessor.java:44) [ApacheJMeter_components.jar:5.1.1 r1855137]
    at org.apache.jmeter.threads.JMeterThread.runPreProcessors(JMeterThread.java:935) [ApacheJMeter_core.jar:5.1.1 r1855137]
    at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:537) [ApacheJMeter_core.jar:5.1.1 r1855137]
    at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:486) [ApacheJMeter_core.jar:5.1.1 r1855137]
...

使用 JMeter 的函数 digest 代替 SHA-256

${__digest(SHA-256,Felix qui potuit rerum cognoscere causas,mysalt,,)}

digest function returns an encrypted value in the specific hash algorithm with the optional salt, upper case and variable name.

参数字段中的用法示例以及使用 args[0] 的输出

您可以使用DigestUtils class functions for encryption in general and in particular for your case it would be DigestUtils.sha256Hex()

以下声明:

vars.put('foo', org.apache.commons.codec.digest.DigestUtils.sha256Hex('bar'))

会将 bar 行的 SHA-256 编码哈希存储到 foo JMeter 变量中,您将能够在需要时以 ${foo} 的形式访问它

vars 代表 JMeterVariables class instance and it provides read/write access to all JMeter Variables in current thread context. Check out Top 8 JMeter Java Classes You Should Be Using with Groovy 文章,以了解有关此内容和其他 JMeter API 可用于 Groovy 脚本的简写的更多信息。