java - 有没有一种方法来确认一个字符串是sha256哈希?

java - 有没有一种方法来确认一个字符串是sha256哈希?

问题描述:

我想验证一个字符串是另一个sha256表示而不必解密它。这可能吗?java - 有没有一种方法来确认一个字符串是sha256哈希?

+3

散列不是加密。目前你的要求很不清楚。基本上验证散列的方法是重新散列字符串,并查看您是否获得相同的散列。 –

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

作为一个价值本身是毫无意义的,如果你想知道一个具体的String是否是一个散列,那么任何32字节的数字都是一个无限的未知纯文本的散列。但这就像问“我怎么知道一个32字节的数字是一个数字?”,你会发现你无处可去。

仅当它与纯文本配对时才有用,以便您可以将它与从纯文本计算的散列进行比较以验证它们是否匹配。

+0

“*任何32字节的数字都是无限未知纯文本的散列*”=>真的有2^32个可能的SHA256值吗? – assylias

+0

http://crypto.stackexchange.com/questions/2670/is-every-output-of-a-hash-function-possible – assylias

+0

@assylias:可能你的意思是'2 ^(32 * 8)'可能的SHA256值,但是一般来说,你的问题没有答案,因为它涉及的散列函数是特定的。假设任何可能长度的可能数量的纯文本,那么如果函数本身非常适合,散列函数的共域可以是完整的。证明这是一个不同的故事。 – Jack

我认为你可以做的是散列其他字符串,然后将这两个字符串相互比较。
不知道这是否会帮助你,但我读到它是创建彩虹表破解密码尝试时常用的实践。
编辑:哦,忘记了这也是比较密码在PHP登录到网页iirc时的方式。
至少我不得不这样做大学。

+1

这是行不通的,因为你不知道这两个值所使用的散列是相同的。 – CLR45

+1

纠正我,如果我错了,但由于OP说这是一个SHA2哈希,应该有一个哈希它的标准函数,如在PHP中的MD5功能。 – clockw0rk

您可以让您的机器使用特定规则解析字符串,并尝试将字符串限定为sha哈希。以下文章可能会回答你的问题How to determine whether a string is a hash

是和否。

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

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