我刚刚阅读了 hash_hmac() 函数,我尝试使用它在数据库中存储密码:
<?php
$dsn = 'mysql:host=localhost;dbname=test';
$username = 'root';
$pass = 'password';
$conn = new PDO($dsn, $username, $pass);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$conn->setAttribute(PDO::ATTR_PERSISTENT, TRUE);
$password = '123MonyeTSahuR456';
$p = addslashes(hash_hmac('sha256', $password, '13#slP3mK;"dA$@m', TRUE));
$query = "INSERT INTO table_one VALUES(NULL, :password)";
try
{
$pdo = $conn->prepare($query);
$pdo->bindValue(':password', $p);
if($pdo->execute())
{
echo $pdo->rowCount();
}
else
{
echo 'fail';
}
}
catch(PDOException $e)
{
echo $e->getMessage();
}
数据库详细信息:
id INT NOT NULL AUTO INCREMENT
password VARBINARY(32) NOT NULL
之后我手动检查了我的数据库并找到了一行带有 BLOB 的行(我以前从不使用/使用 VARBINARY 或 BLOB 数据类型,所以这是我的第一次)
所以存在 1 行,我尝试选择该行:
$query = "SELECT * FROM table_one WHERE password = :password";
返回的pdo->rowCount()
值为 0 ,它没有找到我正在寻找的密码,任何人都可以告诉我为什么?如何解决这个问题?
另一个细节:
PHP版本:5.4
操作系统:Ubuntu 12.04 64 位谢谢