我遇到的问题是,只要存储的文件在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警报来检查密码是否确实发生了变化,而且确实发生了变化。
答案 0 :(得分:1)
如果您未手动将任何盐传递给password_hash()
,它会自动生成盐。因此,相同的密码可以生成不同的哈希值,如果您使用的是PHP 5.5或更高版本,则默认算法PASSWORD_DEFAULT
是Bcrypt,因此不需要包含任何外部文件。
如果您手动提供salt,您的哈希将永远不会更改密码
虽然手动提供盐是不安全的
使用password_hash()可以散列并存储散列密码。当用户提交他的密码搜索数据库时,用户散列密码并以这种方式验证密码:
`password_verify($password , $receivedhash)`
如果密码匹配,则会返回true
,否则返回false
答案 1 :(得分:0)
要验证用户创建帐户时创建的哈希是否与登录尝试中的当前密码匹配,您必须使用函数password_verify()
并提供当前的明文密码以及存储的哈希值从此之前。