java-是否有方法确认字符串是sha256哈希?

java-是否有方法确认字符串是sha256哈希?,java,sha,Java,Sha,我想验证一个字符串是否是另一个字符串的sha256表示形式,而无需对其进行解密。这可能吗?我认为您可以做的是对另一个字符串进行散列,然后将这两个字符串相互比较。 不知道这是否对您有帮助,但我了解到,在创建彩虹表以破解密码尝试时,这是常用的做法。 编辑:哦,忘了这也是在登录网页iirc时用php比较密码的方法。至少在大学里我必须这样做。是和否 您可以很容易地测试字符串是否为十六进制。然后,您可以测试它是否包含统计上合理的数字和字母数。这将排除一些常见的非sha256字符串 但是如果有人创建了一个看

我想验证一个字符串是否是另一个字符串的sha256表示形式,而无需对其进行解密。这可能吗?

我认为您可以做的是对另一个字符串进行散列,然后将这两个字符串相互比较。
不知道这是否对您有帮助,但我了解到,在创建彩虹表以破解密码尝试时,这是常用的做法。
编辑:哦,忘了这也是在登录网页iirc时用php比较密码的方法。
至少在大学里我必须这样做。

是和否

您可以很容易地测试字符串是否为十六进制。然后,您可以测试它是否包含统计上合理的数字和字母数。这将排除一些常见的非sha256字符串


但是如果有人创建了一个看起来像sha256的随机字符串,我认为通过任何数学测试都不可能把它与真实的东西区分开来。该算法被设计为对这一点具有鲁棒性

sha-256值只是一个256位(32字节)的值,在Java中通常表示为
字符串或
字节[]

作为一个值本身,它是没有意义的,如果你想知道一个特定的
字符串
是否是一个散列,那么任何32字节的数字都是一个无限未知纯文本的散列。但这就像问“我怎么知道一个32字节的数字是一个数字?”,你会发现你哪儿也去不了


它只有在与纯文本配对时才有用,以便您可以将其与从纯文本计算的哈希进行比较,以验证它们是否匹配。

哈希不是加密。现在还不清楚你在问什么。基本上验证散列的方法是重新散列字符串,并查看是否得到相同的散列。这不起作用,因为您不知道两个值使用的散列是相同的。如果我错了,请纠正我,但由于OP说它是sha2散列,因此应该有一个标准的散列函数,就像php中的md5函数一样。“任何32字节的数字都是无限未知纯文本的散列”=>真的有2^32个可能的SHA256值吗?@assylias:可能你的意思是
2^(32*8)
可能的SHA256值,但通常情况下,您的问题没有答案,因为它特定于所涉及的哈希函数。假设无限量的任意长度的纯文本,则如果函数本身非常适合,则哈希函数的编码域可能是完整的。证明这是一个不同的故事。是的,c的2^256我的观点是,没有(实际的)方法来说明是否可以通过对某个字符串进行sha256运算来获得一个随机的32字节值。我想这就是我要问的问题。