如果可以轻松解密密码散列有什么用?
What is the use of password hashing if it could be easily decrypted ?
密码是 mySQL
数据库应该以哈希形式保存
echo password_hash('test', PASSWORD_BCRYPT);
给我们
yPxsFGPbGtgYb44GRPL84ev2T0xR0LXMSSKm7cuSBUbAU114mosFG
或
y$E.q3bVE9EE2ce2VaKPJgtuwEMRZxpTYiQR6Mw2dmLGqeKx/PsQY42
或。 . .
但是所有这些 y. . .
字符串都可以使用 password_verify
轻松解密回 test
。
假设有人可以访问散列密码,那么她将能够使用 password_verify
解密密码?一旦有人获得字符串 y$E.q3bVE9EE2ce2VaKPJgtuwEMRZxpTYiQR6Mw2dmLGqeKx/PsQY42
他或她就可以轻松地将其转换回纯文本,对吗?那么为什么要散列密码呢?
此声明
But all of those y. . . strings are easily decrypted back to test using password_verify .
不正确。
因为password_hash()
是单向哈希。
这意味着(实际上)没有办法从散列字符串返回到原始字符串。
password_verify()
不解密 哈希(因为这是不可能的)。更简单地说,它对要验证的密码进行哈希处理,并检查生成的哈希值是否与提供的哈希值匹配。
看来您对 password_verify
函数输入的数据和输出的数据有误解。在 "decryption" 期间,您传入散列应该代表的实际密码。必须知道密码才能对其进行验证。
password_verify
的作用是使用与给定哈希相同的方法再次对您提供的密码进行哈希处理,并检查两者是否匹配。
因此无法使用 password_verify
轻松反转哈希。您将不得不通过密码进行暴力破解以找到与哈希匹配的密码。
注意:如果说密码散列,这不能称为加密,因为它是单向的,加密会有相应的解密函数。
密码是 mySQL
数据库应该以哈希形式保存
echo password_hash('test', PASSWORD_BCRYPT);
给我们
yPxsFGPbGtgYb44GRPL84ev2T0xR0LXMSSKm7cuSBUbAU114mosFG
或
y$E.q3bVE9EE2ce2VaKPJgtuwEMRZxpTYiQR6Mw2dmLGqeKx/PsQY42
或。 . .
但是所有这些 y. . .
字符串都可以使用 password_verify
轻松解密回 test
。
假设有人可以访问散列密码,那么她将能够使用 password_verify
解密密码?一旦有人获得字符串 y$E.q3bVE9EE2ce2VaKPJgtuwEMRZxpTYiQR6Mw2dmLGqeKx/PsQY42
他或她就可以轻松地将其转换回纯文本,对吗?那么为什么要散列密码呢?
此声明
But all of those y. . . strings are easily decrypted back to test using password_verify .
不正确。
因为password_hash()
是单向哈希。
这意味着(实际上)没有办法从散列字符串返回到原始字符串。
password_verify()
不解密 哈希(因为这是不可能的)。更简单地说,它对要验证的密码进行哈希处理,并检查生成的哈希值是否与提供的哈希值匹配。
看来您对 password_verify
函数输入的数据和输出的数据有误解。在 "decryption" 期间,您传入散列应该代表的实际密码。必须知道密码才能对其进行验证。
password_verify
的作用是使用与给定哈希相同的方法再次对您提供的密码进行哈希处理,并检查两者是否匹配。
因此无法使用 password_verify
轻松反转哈希。您将不得不通过密码进行暴力破解以找到与哈希匹配的密码。
注意:如果说密码散列,这不能称为加密,因为它是单向的,加密会有相应的解密函数。