JMeter上Java Groovy中sha-256的哈希字符串[已关闭]

stszievb  于 8个月前  发布在  Java
关注(0)|答案(1)|浏览(71)

已关闭此问题为not reproducible or was caused by typos。它目前不接受回答。

此问题是由打印错误或无法再重现的问题引起的。虽然类似的问题可能是on-topic在这里,这一个是解决的方式不太可能帮助未来的读者。
上个月关门了。
Improve this question
我正在尝试将计算SHA-256哈希的Python脚本转换为Java Groovy,以便在JMeter中使用。然而,我遇到了Python和Groovy之间生成的哈希值的差异。我希望得到一些关于如何取得一致结果的指导。
Python代码:

import hashlib

def get256SHA(string):
    m = hashlib.sha256()
    m.update(string.encode('utf-8'))
    return m.hexdigest()

hashedValue = get256SHA("string")

Java Groovy代码:

import java.security.MessageDigest

String get256SHA(String string) {
    MessageDigest md = MessageDigest.getInstance("SHA-256")
    byte[] bytes = string.getBytes("UTF-8")
    byte[] digest = md.digest(bytes)
    StringBuffer hexString = new StringBuffer()

    for (byte b : digest) {
        hexString.append(String.format("%02x", b & 0xff))
    }

    return hexString.toString()
}

String input = "string"
String hashedValue = get256SHA(input)
vars.put("hashedValue", hashedValue)

在JavaGroovy代码中,我尝试复制Python逻辑来计算SHA-256哈希。但是,Python和Groovy实现之间产生的哈希值并不匹配。谁能帮我找出导致这种不一致的潜在差异,并建议对Java Groovy代码进行更正?
经过再次调试,我得到的代码下面没有错,错的是我的输入没有trim。而且这是一条很长的路,你可以试试下面的答案,这是一条很好的路。

rlcwz9us

rlcwz9us1#

JMeter中有__digest()函数,它可以使用各种算法加密值。
在你的情况下,它会像这样简单:

${__digest(SHA-256,string,,,hashedValue)}

请参阅Apache JMeter Functions - An Introduction文章以了解有关JMeter函数概念的更多信息。
如果你仍然想使用Groovy,最简单的方法是使用DigestUtils.sha256Hex()函数:

vars.put('hashedValue', org.apache.commons.codec.digest.DigestUtils.sha256Hex('string'))

相关问题