首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >验证Hashing.sha256()生成的散列

验证Hashing.sha256()生成的散列
EN

Stack Overflow用户
提问于 2022-06-02 10:56:13
回答 2查看 620关注 0票数 0

我使用Google创建了以下代码:

代码语言:javascript
复制
String sha256hex = Hashing.sha256()
                    .hashString(cardNum, StandardCharsets.UTF_8)
                    .toString();

如何验证生成的值是正确生成的散列?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-06-04 22:06:13

维基百科和不同的RFCs、RFC 6234和取代的RFC 4634中,SHA 2算法的家族都有很好的描述。

所有这些源都规定,SHA 256哈希函数提供的输出为256位长,32字节(粗略地说,与SHA字相伴的数字是家族中每个算法的所述值)。

这些字节序列通常是用十六进制编码的。这也是番石榴的所提供的执行

然后,可以将问题简化为识别Java中的字符串是否是有效的十六进制编码。

这个问题已经在这里得到了解答,例如在这个问题中。

为了简单起见,考虑一下@laycat提出的解决方案

代码语言:javascript
复制
boolean isHex = mac_addr.matches("^[0-9a-fA-F]+$");

由于每个字节都使用两个十六进制字符编码,而且如前所述,SHA-256算法生成并输出32个字节,因此您可以安全地检查64个字符长度的字符串,就像@D.O.的回答中所建议的那样。您的验证代码可以类似于以下内容:

代码语言:javascript
复制
boolean canBeSha256Output = sha256Hex.matches("^[0-9a-fA-F]{64}$");

请注意,您不可能说某个长度的字符十六进制字符串本身是否是散列函数的结果,无论您考虑哪种哈希函数。

只有当哈希输出与对原始输入应用相应哈希函数的结果相匹配时,才能确保哈希输出是哈希输出。

票数 2
EN

Stack Overflow用户

发布于 2022-06-04 14:22:40

您可以使用regex验证它是否像sha256散列(64个十六进制字符),如下所示

代码语言:javascript
复制
\b[A-Fa-f0-9]{64}\b
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72475078

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档