java - 有没有一种方法来确认一个字符串是sha256哈希?
sha-256值只是一个256位(32字节)值,通常在Java中表示为String
或byte[]
。
作为一个价值本身是毫无意义的,如果你想知道一个具体的String
是否是一个散列,那么任何32字节的数字都是一个无限的未知纯文本的散列。但这就像问“我怎么知道一个32字节的数字是一个数字?”,你会发现你无处可去。
仅当它与纯文本配对时才有用,以便您可以将它与从纯文本计算的散列进行比较以验证它们是否匹配。
“*任何32字节的数字都是无限未知纯文本的散列*”=>真的有2^32个可能的SHA256值吗? – assylias
http://crypto.stackexchange.com/questions/2670/is-every-output-of-a-hash-function-possible – assylias
@assylias:可能你的意思是'2 ^(32 * 8)'可能的SHA256值,但是一般来说,你的问题没有答案,因为它涉及的散列函数是特定的。假设任何可能长度的可能数量的纯文本,那么如果函数本身非常适合,散列函数的共域可以是完整的。证明这是一个不同的故事。 – Jack
是和否。
你可以很容易地测试一个字符串是十六进制的。然后您可以测试它是否包含统计上合理的数字和字母。这将排除一些常见的非sha256字符串。
但是,如果有人创建了一个随机字符串设计看起来像一个sha256,我不认为有可能通过任何数学测试区分它与真实的东西。该算法被设计为对此有效。
散列不是加密。目前你的要求很不清楚。基本上验证散列的方法是重新散列字符串,并查看您是否获得相同的散列。 –