使用password_hash PASSWORD_DEFAULT遗留问题

时间:2017-06-07 02:27:48

标签: php database cryptography

从php页面:http://php.net/manual/en/function.password-hash.php

  

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

这是否意味着如果我<div class="block-section text-center "> <img src="images/<?php echo($_SESSION['user'][14]) ?>" class="img-rounded" alt=""> <div class="white-space-20"></div> <h4><a href="perfil.php"><?php echo($_SESSION['user'][3]) ?></a></h4> <div class="white-space-20"></div> <ul class="list-unstyled"> <li><a href="mensajes.php"> Messages </a></li> <li><a href="notificaciones.php"> Notifications<?php here is where I want the total of the query ?></a></li> <li><a href="cambio.php"> Change password</a></li> </ul> <div class="white-space-20"></div> </div> </div> <div class="col-md-9 col-sm-9"> <!-- Block side right --> 使用更新版本的密码,例如PHP8,它可能无法正确解密存储的密码?或者已经安全地嵌入了所有信息,我所要做的就是将password_verify的输出存储到我的数据库中,只需调用password_hash进行验证而不用担心?

2 个答案:

答案 0 :(得分:2)

  

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

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

(具体而言,所有哈希值当前存在的$2y$前缀表示它们是使用PASSWORD_BCRYPT算法生成的。未来的任何算法都将使用不同的前缀。)

答案 1 :(得分:1)

是的,所有信息都是安全嵌入的,只要您的数据库没有截断加密密码。我认为这几乎是一个给定的。

警告回家的原因是,为了您未来的自身,您可以将信息存储在长度灵活的字段中。从历史上看,与MD5一样,人们可能选择了VARCHAR(255)。但是对于bcrypt,你需要选择更灵活的东西。那可能是:

  • CHAR(60)
  • int asInt = 1234; byte asByte[2]; asByte[0] = asInt >> 8; asByte[1] = asInt & 0xFF; ,此列是表中的 last ,因此延长其长度可能不需要RDBMS重新调整表。