【发布时间】:2018-06-30 06:24:47
【问题描述】:
我正在尝试使用 AES-256 加密密码,因为我在数据库中有密钥和方法。我的问题是我使用 mysqli 并且效果很好,但现在我正在使用 PDO else mysqli 并创建函数。
没有加密功能,这些功能也能正常工作。这就是我的代码。
<?php
class DWLib {
public function Register($u_name, $u_email, $u_pass) {
try {
$db = DB();
$query = $db->prepare("INSERT INTO users(u_fname, u_lname, u_name, u_email, u_pass, u_rank) VALUES ('','',:username,:email,:password,'1')");
$query->bindParam("username", $u_name, PDO::PARAM_STR);
$query->bindParam("email", $u_email, PDO::PARAM_STR);
global $password;
$password = substr(hash('sha256', $password, true), 0, 32);
global $method;
$iv = chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0);
$encrypted = base64_encode(openssl_encrypt($u_pass, $method, $password, OPENSSL_RAW_DATA, $iv));
$query->bindParam("password", $encrypted, PDO::PARAM_STR);
$query->execute();
return $db->lastInsertId();
} catch (PDOException $e) {
exit($e->getMessage());
}
}
public function Encryption($password, $method)
{
try {
$db = DB();
$query = $db->prepare("SELECT * FROM encryption");
$query->execute();
if ($query->rowCount() > 0) {
while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
$password = $row["password"];
$method = $row["method"];
}
} else {
return false;
}
} catch (PDOException $e) {
exit($e->getMessage());
}
}
}
?>
我尝试使用return,但一直不起作用...
【问题讨论】:
-
你为什么不用
password_hash() / password_verify()? -
因为 SHA 不是加密,它是一种单向哈希函数。 AES (Advanced_Encryption_Standard) 是一种对称加密标准。
标签: php mysql encryption pdo