我计划使用电子邮件作为登录ID。
用户注册,我在mysql中记录
INSERT INTO `table_name` ( `Email` ) VALUES ( AES_ENCRYPT(?, "some_hash") )
而?
是$_POST['email']
当用户想要登录时,我想这样做
SELECT `Password`, AES_DECRYPT(`Email`, "some_hash") AS `Email` FROM `table_name` WHERE `Email` = AES_ENCRYPT(?, "some_hash")
而?
又是$_POST['email']
这不起作用(我无法获取散列电子邮件)。据我所知,不可能将$_POST
值与mysql AES_ENCRYPT
值进行比较?
更新
抱歉,似乎一切正常。可能由于一些疏忽错误而无法正常工作。
现在我用了
SELECT `Password`, AES_DECRYPT(`Email`, "some_hash") AS `Email` FROM `table_name` WHERE `Email` = AES_ENCRYPT(?, "some_hash")
并使用密码和电子邮件获取数组。
这是更新的工作代码:
try {
$stmt = $db->prepare( '
SELECT `Password`
FROM `table_name`
WHERE `Email` = AES_ENCRYPT(?, "some_hash")
;' );
$stmt->execute( array( trim($_POST['email']) ) );
$arr = $stmt->fetchAll(PDO::FETCH_ASSOC);
}
使用WHERE Email = AES_ENCRYPT(?, "some_hash")
i哈希(AES_ENCRYPT
)trim($_POST['email'])
并将其与mysql列Email
中的哈希值进行比较。