Php 如果密码散列可以轻松解密,那么它有什么用处?
密码是mySQL数据库应以哈希形式保存Php 如果密码散列可以轻松解密,那么它有什么用处?,php,mysql,encryption,hash,Php,Mysql,Encryption,Hash,密码是mySQL数据库应以哈希形式保存 echo password_hash('test', PASSWORD_BCRYPT); 给我们 $2y$10$8PxsFGPbGtgYb44GRPL84ev2T0xR0LXMSSKm7cuSBUbAU114mosFG 或 或者 但是所有这些$2比$10字符串解密回测试 假设有人能够访问散列密码,那么她将能够使用密码\u验证对其进行解密?一旦有人拥有字符串$2y$10$E.q3bVE9EE2ce2VaKPJgtuwEMRZxpTYiQR6Mw2dm
echo password_hash('test', PASSWORD_BCRYPT);
给我们
$2y$10$8PxsFGPbGtgYb44GRPL84ev2T0xR0LXMSSKm7cuSBUbAU114mosFG
或
或者
但是所有这些$2比$10使用password\u verify
可以轻松地将code>字符串解密回测试
假设有人能够访问散列密码,那么她将能够使用密码\u验证
对其进行解密?一旦有人拥有字符串$2y$10$E.q3bVE9EE2ce2VaKPJgtuwEMRZxpTYiQR6Mw2dmLGqeKx/PsQY42
他或她就可以轻松地将其转换回纯文本,对吗?那么为什么要对密码进行哈希呢 这句话
但是所有这些20美元到10美元。字符串可以使用密码\u验证轻松解密回测试
事实并非如此
因为密码\u hash()
是单向散列
这意味着(实际上)没有办法从散列字符串返回到原始字符串
password\u verify()
不会解密散列(因为这是不可能的)。更简单的是,它对要验证的密码进行散列,并检查结果是否与提供的散列匹配。您似乎对password\u verify
函数中的数据和数据有误解。在“解密”过程中,您传入散列应该表示的实际密码。必须知道密码才能对其进行验证
password\u verify
所做的是使用与给定哈希相同的方法对您再次给出的密码进行哈希运算,并检查两者是否匹配
因此,使用password\u verify
不可能轻松反转哈希值。您必须对密码进行暴力破解,以找到与哈希匹配的密码
注意:如果我们谈论密码散列,这不能称为加密,因为它是单向的,加密将具有相应的解密功能。password\u verify
不会解密,它会重新散列以查看它们是否匹配。这就是散列的意义所在,它实际上是不可逆的。也许你可以简单地解码sha1散列,例如“mypassword”,但像这样的东西很难解码:“#qrti6tr2++”作为密码。他或她可以很容易地将其转换回纯文本,对吗?简单地说,不是正确的password\u verify
函数要求未删除的密码能够进行验证(因为它无法从散列中获取密码)。没有它,就无法进行验证。
$2y$10$E.q3bVE9EE2ce2VaKPJgtuwEMRZxpTYiQR6Mw2dmLGqeKx/PsQY42