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

问题描述 投票:-7回答:1

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

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

使用$login_password_for_login = 12345hash函数给了我:5994471abb01112afcc18159f6cc74b4f511b99806da59b3caf5a9c173cacfc5

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

hash sha256
1个回答
1
投票

您没有'解密'哈希值,因为哈希不是加密。

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

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


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

那么,我们的想法是,你会考虑使用盐渍哈希,在每个用户的基础上只将盐存储在DB中作为自己的记录,然后将原始密码字符串的盐渍哈希存储在数据库中。

然后,要验证密码输入是否正确,从DB获取salt,获取给定密码的用户输入,然后使用DB中的salt,获取该输入的salted哈希值。获取结果哈希并将其与存储在DB中的盐渍哈希进行比较。如果匹配,则您有一个经过验证的密码;如果它们不匹配,则无效。

这样,实际上没有任何密码可以解密,这意味着在您的站点的数据泄露情况下,密码不容易被检索。 (这并不排除有人违反您的数据库,复制数据并尝试强制密码,但取决于您对密码复杂性的强制执行以及黑客想要实际获取凭据的努力,不太可能发生)

我用我理解的语言写了一个这样的例子,但由于你没有定义你正在使用的语言,所以我不可能在这里为你写一个有用的例子。

也就是说,如果你正在使用PHP,你可能会发现this document on crackstation.net正确地进行了安全的盐渍密码散列;已经有PHP实现正确执行此操作,因此您不必编写自己的代码。

© www.soinside.com 2019 - 2024. All rights reserved.