【问题标题】:How to check if input string is a hash of algorhitms from list: ["md5", "sha1", "sha256"] [duplicate]如何检查输入字符串是否是列表中算法的哈希:[“md5”,“sha1”,“sha256”] [重复]
【发布时间】:2020-03-29 09:24:46
【问题描述】:

我必须写这样的方法:

boolean isHash(String str){
  ...
}

如果输入字符串是 md5 hash 或 sha1 hash 或 sha256 hash,则方法应返回 true。

这样的方法可以实现吗?

【问题讨论】:

  • 每个哈希都有不同的长度和标准。你试过什么?
  • @stud3nt,sha256 呢?
  • @stud3nt 是唯一匹配此类正则表达式的哈希算法吗?
  • 不,不同的哈希算法会输出不同长度的哈希。如果您只想检查给定的字符串是否是有效的哈希,您可以根据使用的哈希算法检查字符长度。

标签: java cryptography md5 sha1 sha256


【解决方案1】:

您可以通过使用正则表达式或 java 中的任何其他方式检查其中的十六进制字符串表示来验证哈希。

例如(如果我们有一个字符串 - “test”):

md5 哈希 = 098f6bcd4621d373cade4e832627b4f6
正则表达式 - ^[a-fA-F0-9]{32}$

sha1 哈希 = a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
正则表达式 - ^[a-fA-F0-9]{40}$

sha256 哈希 = 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08
正则表达式 - ^[a-fA-F0-9]{64}$

【讨论】:

  • 请注意,还有其他算法,甚至是标准化算法,例如 SHA3-256 和鲜为人知的 SHA-512/256,它们的输出大小与 SHA-256 哈希值相同。基本上,您确认输入由特定数量的十六进制编码字节组成,仅此而已。是的,问题中算法的输出大小不同。
  • @MaartenBodewes 同意,很容易区分 md5、sha1 和 sha256 哈希,因为它们都有不同的输出大小。
  • 您给出正则表达式时答案无效,但未指定使用什么方法。我必须在其他三个论坛上搜索才能看到它是 String#matches
猜你喜欢
  • 1970-01-01
  • 2013-05-28
  • 2014-02-07
  • 1970-01-01
  • 2019-08-08
  • 1970-01-01
  • 1970-01-01
  • 2011-04-18
  • 2011-08-24
相关资源
最近更新 更多