我使用Google创建了以下代码:
String sha256hex = Hashing.sha256()
.hashString(cardNum, StandardCharsets.UTF_8)
.toString();如何验证生成的值是正确生成的散列?
发布于 2022-06-04 22:06:13
在维基百科和不同的RFCs、RFC 6234和取代的RFC 4634中,SHA 2算法的家族都有很好的描述。
所有这些源都规定,SHA 256哈希函数提供的输出为256位长,32字节(粗略地说,与SHA字相伴的数字是家族中每个算法的所述值)。
这些字节序列通常是用十六进制编码的。这也是番石榴的所提供的执行。
然后,可以将问题简化为识别Java中的字符串是否是有效的十六进制编码。
这个问题已经在这里得到了解答,例如在这个问题中。
为了简单起见,考虑一下@laycat提出的解决方案
boolean isHex = mac_addr.matches("^[0-9a-fA-F]+$");由于每个字节都使用两个十六进制字符编码,而且如前所述,SHA-256算法生成并输出32个字节,因此您可以安全地检查64个字符长度的字符串,就像@D.O.的回答中所建议的那样。您的验证代码可以类似于以下内容:
boolean canBeSha256Output = sha256Hex.matches("^[0-9a-fA-F]{64}$");请注意,您不可能说某个长度的字符十六进制字符串本身是否是散列函数的结果,无论您考虑哪种哈希函数。
只有当哈希输出与对原始输入应用相应哈希函数的结果相匹配时,才能确保哈希输出是哈希输出。
发布于 2022-06-04 14:22:40
您可以使用regex验证它是否像sha256散列(64个十六进制字符),如下所示
\b[A-Fa-f0-9]{64}\bhttps://stackoverflow.com/questions/72475078
复制相似问题