BCRYPT密码在包含';要求';PHP


BCRYPT password changing after including with 'require' PHP

我遇到了一个问题,每当使用PHP中的require包含临时存储的密码时,该密码就会更改。

我正在构建一个CMS,并将密码临时存储在一个单独的文件(temp_register.php(中。

/* Some more PHP above */ 
require 'lib/password.php';
$pass1 = password_hash($pass1, PASSWORD_BCRYPT);
/* Script to store password in file below this line */

但每当我想在另一个PHP脚本中require文件时,密码哈希就会发生变化。

/* Some more PHP above */
require 'temp/temp_register.php';
/* Password is stored as $pass in that file
This line of JavaScript is for test purpose only! */
?><script>alert('<?php echo $pass; ?>');</script><?php
$query = "INSERT INTO users VALUES ('',:username,:email,:password)";
$stmt = $db->prepare($query);
$stmt->bindParam(':username', $username);
$stmt->bindParam(':email', $email);
$stmt->bindParam(':password', $pass);
$stmt->execute();
/* Some more PHP below */

我使用了一个JavaScript警报来检查密码是否真的更改了,它确实更改了。

当您不手动将任何盐传递给password_hash()时,它会自动生成盐。所以相同的密码可以生成不同的哈希,如果您使用的是PHP 5.5或更高版本,默认的算法PASSWORD_DEFAULT是Bcrypt,所以不需要包含任何外部文件。

如果您手动提供salt,您的哈希将永远不会更改为密码

尽管手动提供盐不安全

使用password_hash((可以散列并存储散列后的密码。当用户提交他的密码搜索数据库为用户散列密码和验证密码的方式:

`password_verify($password , $receivedhash)`

如果密码匹配,它将返回true,否则返回false

要验证用户创建帐户时创建的哈希是否与登录尝试中的当前密码匹配,您必须使用函数password_verify()并提供当前明文密码以及以前存储的哈希。