php.net 脚本: http://php.net/manual/en/function.password-hash.php以及:http://php.net/manual/en/function.password-verify.php
这个密码验证例程的明显简单性非常吸引人,但是在阅读了一天的stackoverflow和无数的黑客之后,这是我非常简单,根本不安全的测试版本:
<?php
$p = "bumblebee";
$hash = (password_hash($p, PASSWORD_DEFAULT));
echo ($p);
echo ($hash);
if (password_verify('bumblebee', $hash)) {
echo 'Password is valid!';
} else {
echo 'Invalid password.';
}
?>
以上返回"密码有效!(这是 PHP.net 组合的两个脚本(
下面不起作用(唯一的差异是哈希被写入数据库并读回,然后转换为字符串(
<?php
$userName = $_REQUEST["userName"];
$passWord = $_REQUEST["passWord"];
// $p = "$passWord";
// $hash = (password_hash($p, PASSWORD_DEFAULT));
//set DB access variables
require_once('./php/hs_DBlogin.php');
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$passWord_get = mysqli_query($conn, "SELECT passWordHash FROM hsUser WHERE userName='$userName' LIMIT 1");
$passWord_out = mysqli_fetch_array($passWord_get);
$hashAsStr = $passWord_out[0];
echo ($hashAsStr);
echo ($_REQUEST["passWord"]);
if (password_verify($_REQUEST["passWord"], $hashAsStr)) {
echo 'Password is valid!';
} else {
echo 'Invalid password.';
}
?>
Here is the insert to DB script:
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$passWordHash = password_hash('$passWord', PASSWORD_DEFAULT);
$sql = "INSERT INTO `hsUser`(`firstName`, `lastName`, `userName`, `passWordHash`,`hsStatus`) VALUES ('$firstName','$lastName','$userName','$passWordHash','$hsStatus')";
放弃了 php 的password_verify并使用 sha1脚本位于:http://www.localwisdom.com/blog/2013/03/building-a-simple-registerlogin-system-in-php-using-sha256/经过一些清理,工作正常
这么快放弃,您使用SHA256的替代方法是存储用户密码的极其不安全的方法。
正如其他人已经提到的,建议使用varchar(255)
字段。根据您的评论,这不是问题。
如果您为注册显示的代码正是您的工作代码,那么罪魁祸首很可能是这一行:
$passWordHash = password_hash('$passWord', PASSWORD_DEFAULT);
此语句将创建文本'$passWord'
的哈希,而不是从变量 $passWord
创建哈希,因此它应该是:
$passWordHash = password_hash($passWord, PASSWORD_DEFAULT);