将 SHA256 哈希解密为原始字符串?

Abd*_*han -6 hash sha256

是否可以获取原始哈希值,然后将其解码回原始字符串?

hash('sha256', $login_password_for_login)给我一个哈希值,如下所示,但我想从哈希值返回到原始字符串。

使用$login_password_for_login = 12345,该hash函数给了我这个: 5994471abb01112afcc18159f6cc74b4f511b99806da59b3caf5a9c173cacfc5

我希望能够检索登录密码的原始数字或字符串。如何反转哈希值并获取原始字符串?

Tho*_*ard 5

不会“解密”哈希值,因为哈希值不是加密。

至于撤消哈希函数以获取原始字符串,无法从哈希到原始项,因为哈希是单向操作。您可以获取一个项目并获取哈希值,但不能获取哈希值并获取原始项目。

请注意,哈希值不应与加密相混淆;加密是一个不同的过程,您可以获取某个项目,使用某种类型的密钥(预共享密钥或对称密钥,如 PGP 密钥)对其进行加密,然后再对其进行解密。哈希值不是这样工作的。


在注释中,您表明您正在尝试将密码保存在数据库中。问题是,您不希望能够破坏数据库的人立即能够解密密码,这就是散列如此有吸引力的原因。

那么,我们的想法是,您可以考虑使用加盐哈希,仅将每个用户的盐作为自己的记录存储在数据库中,然后将其原始密码字符串的加盐哈希存储在数据库中。

然后,要验证密码输入是否正确,请从数据库获取盐,获取给定密码的用户输入,然后使用数据库中的盐,获取该输入的加盐哈希。获取生成的哈希值并将其与存储在数据库中的加盐哈希值进行比较。如果它们匹配,则您拥有经过验证的密码;如果不匹配,则无效。

这样,实际上无法轻松解密任何密码,这意味着在您的网站发生数据泄露的情况下,密码不容易被检索到。(这并不排除有人破坏您的数据库、复制数据并尝试暴力破解密码,但取决于您对密码复杂性的强制要求以及黑客想要实际获取凭据的努力,这发生的可能性较小)

我会用我理解的语言编写一个示例,但是由于您没有定义您正在使用的语言,因此我不可能在这里为您编写一个有用的示例。

也就是说,如果您使用 PHP,您可能会在rackstation.net 上找到有关正确执行安全加盐密码散列的文档;已经有 PHP 实现可以正确执行此操作,因此您不必编写自己的代码。