2017-06-07 51 views
2

从PHP页面:http://php.net/manual/en/function.password-hash.php使用password_hash PASSWORD_DEFAULT遗留涉及

PASSWORD_DEFAULT - 使用bcrypt算法(默认为PHP 5.5.0的)。请注意,随着新的更强大的算法添加到PHP中,此常量将随时间而改变。出于这个原因,使用这个标识符的结果的长度会随着时间而改变。因此,建议将结果存储在可扩展超过60个字符的数据库列中(255个字符将是一个不错的选择)。

这是否意味着如果我在password_verify的密码中使用了更新的版本,例如, PHP8,它可能无法正确解密存储的密码?或者是所有这些信息已经安全地嵌入了,我所要做的就是将password_hash的输出存储到我的数据库中,并且只需要拨打password_verify进行验证而无后顾之忧?

回答

1

是的,所有信息都是安全嵌入的,前提是您的数据库不会截断加密的密码。我想,这几乎是给定的。

这种警告是驾车回家的是,为了您未来的自我的理智,您将信息存储在长度灵活的字段中。历史上,与MD5一样,人们可能选择了CHAR(32)。但是使用bcrypt,你需要选择更灵活的东西。这可能是:

  • VARCHAR(255)
  • CHAR(60),本专栏是最后一个表中,以便延长其长度可能不需要RDBMS洗牌表。
+0

我使用MariaDB的和我有字段类型为文本。可以吗? –

+0

无界'TEXT'太过分了,我会用'VARCHAR'或者一个有界的'TEXT',像'TEXT(255)'。 – bishop

2

这是否意味着,如果我password_verify用最新版本的密码,例如PHP8,它可能无法正确解密存储的密码?

否密码哈希包含有关实际使用哪种特定算法的信息。如果未来版本的PHP支持多种密码散列算法,它将能够从旧散列中读取这些信息以找出如何再现它。

(具体而言,$2y$前缀目前存在于所有哈希表明他们使用PASSWORD_BCRYPT算法生成。在任何未来的算法将使用不同的前缀。)