如何检查密码是否为哈希 - PHP


How To Check If A Password Is A Hash - PHP

我有一个用户类可以执行一些简单的验证。我想使用 phpass 将所有密码存储为哈希。但是,我不希望它是 User 类的工作来设置哈希,这是其他一些函数的工作。因此,如果我有一个名为setPassword的简单函数,如何确保密码是哈希。is_binary行吗??我不是在这里比较哈希,我只是想确保密码是哈希。什么样的MD5应该无关紧要。沙1...等等。我只想确保密码是哈希。

例:

class User
{
    private password = NULL;
    private $errors = array();
    public function setPassword($password)
    {
        // make sure password is a hash...pseudo code
        if (!password_is_hash($password))
        {
            $this->errors[] = 'Invalid password';
            return $this;
        }
        $this->password = $password;
        return $this;
    } 
    public function getPassword()
    {
        return $this->password;
    }
}

我不确定它是否总是正确/安全的,但您可以使用password_get_info函数。如果该方法无法猜测算法,我们可以假设字符串不是哈希。

function password_is_hash($password)
{
    return password_get_info($password)['algoName'] !== 'unknown';
}

这不适用于像sha1或md5这样的简单算法。

正如其他人所说,哈希是字符串,尽管(在某些情况下)您可以说 md5 或 sha1 总是 n 个字符,但您无法保证给定的字符串是哈希。

如果您现在想要的是将用户提供的密码与保存在数据库中的哈希进行比较,您可以从数据库中获取保存的哈希,然后使用用于创建保存哈希的相同函数对提供的字符串进行哈希处理,并确保它们相等并进行身份验证。

所有哈希都只是字符串。所以你不能准确地检查它是否是哈希。MD5 哈希看起来像a23b34c45d56a23b34c45d56a23b34c4,您无法将其与myrealreallooooongpassword111222区分开来

我不太确定你想做什么,但我想为什么要检查密码是否是哈希。

如果您使用任何函数/库对其进行哈希处理,则可以检查该函数,无论哈希是否成功完成。

除此之外,您无法识别字符串是否为哈希(ed),因为它是字符串。