Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hash 是否将SHA256哈希解密为原始字符串?_Hash_Sha256 - Fatal编程技术网

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

Hash 是否将SHA256哈希解密为原始字符串?,hash,sha256,Hash,Sha256,是否可以获取原始哈希值,然后将其解码回原始字符串 hash'sha256',$login\u password\u for\u login给我一个hash,如下所示,但我想从hash值返回原始字符串 对于$login\u password\u for\u login=12345,哈希函数给出以下信息: 5994471abb01112afcc18159f6cc74b4f511b99806da59b3caf5a9c173cacfc5 我希望能够检索登录密码的原始数字或字符串。如何反转散列并获取原始

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

hash'sha256',$login\u password\u for\u login给我一个hash,如下所示,但我想从hash值返回原始字符串

对于$login\u password\u for\u login=12345,哈希函数给出以下信息: 5994471abb01112afcc18159f6cc74b4f511b99806da59b3caf5a9c173cacfc5

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

您不能“解密”散列,因为散列不是加密

至于撤消散列函数以获取原始字符串,没有办法从散列到原始项,因为散列是单向操作。您可以获取项目并获得散列,但不能获取散列并获得原始项目

注意不要将散列与加密混淆;加密是一个不同的过程,您可以获取项目,使用某种类型的密钥(预共享密钥或类似PGP密钥的对称密钥)对其进行加密,然后对其进行解密。散列不是这样工作的

在注释中,表示您正试图在数据库中保存密码。问题是,你不想让一个可以破坏数据库的人能够立即解密密码,这就是为什么散列如此吸引人的原因

这个想法是,你会考虑使用盐渍散列,在每个数据库中只将盐存储在数据库中作为自己的记录,然后将原始密码字符串的咸散列存储在数据库中。 然后,为了验证密码输入是否正确,从数据库中获取salt,获取给定密码的用户输入,然后使用数据库中的salt,获取该输入的salt散列。获取结果散列并将其与存储在DB中的盐散列进行比较。如果它们匹配,则您有一个经过验证的密码;如果不匹配,则无效

这样,实际上没有任何密码的解密是容易做到的,这意味着在您的站点出现数据泄露的情况下,密码不容易被检索。这并不排除有人破坏您的数据库,复制数据,并试图暴力破解密码,但这取决于您对密码复杂性的强制执行以及黑客获取凭据的实际努力程度,发生这种情况的可能性较小

我会用我理解的语言来写一个例子,但是由于你没有定义你使用的语言,我不可能在这里为你写一个有用的例子

也就是说,如果您使用PHP,您可能会发现如何正确地进行安全的salt密码哈希;据推测,已经有PHP实现可以做到这一点,因此您不必编写自己的代码。

哈希无法解密,因为它们不是加密

我相信你对散列的定义是错误的。尽管散列输出通常与加密函数的输出类似,但散列实际上是一种极有损的数据压缩形式。当我说极度有损时,我的意思是为了得到一个固定的长度,所有的原始数据都被破坏了。由于没有原始数据保留,因此无法解密哈希

也就是说,哈希可以用来模拟加密。你要做的是,当一个人注册时,你创建一个元组,包含他们的用户名和密码的散列。然后,当有人尝试登录时,比较如下*的哈希:

导入hashlib 从login\u info import logins,这是一个包含元组的数组。 def hasherstring:str->字节: stringer=bytestring 返回hashlib.sha256stringer.hexdigest def loginusername:str,密码:str->int:如果登录正确,则返回0,否则返回1。 user=hasherusername pass=hasherpassword 对于rangelenlogins中的i: 如果登录[i][0]==用户: 如果登录[i][1]==通过: 返回0 其他: 返回1 其他: 返回1
*Nota Bene:我正在使用Python 3作为示例,因为我的PHP和Javascript有点不切实际。

哈希是单向的。它们不能被解密,因为它们并没有被加密。那个么我该如何在数据库中保存密码并检索它们呢it@AbdulAli当你说出这就是你的目标时,它会有所帮助。我的方法如下:1根据每个用户使用一个盐,并将盐存储在数据库中。2在原始密码上做一个盐渍sha256散列,并存储结果散列。3对于登录检查,使用输入的密码,为该特定用户使用数据库中的salt,将生成的salt sha256哈希与存储在数据库中的用户salt sha256哈希进行比较。据我所知,用这个方法发生冲突的可能性很小,如果比较的两个哈希值匹配,那么就假设它是正确的PW。@AbdulAli说,你真的应该指定它 作为你问题的目标,你的问题应该是如何在数据库中安全地存储登录系统或类似系统的密码,并定义你试图使用的语言。