【发布时间】:2012-12-09 02:20:06
【问题描述】:
我已经搜索了一个小时,但我无法让它工作。
我有一个名为user 的表,其中有两列username varchar(64) 和password binary(20)。我正在使用 SHA1 加密,因为我想让它变得又快又脏。
mysql> describe user;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| username | varchar(64) | NO | PRI | NULL | |
| password | binary(20) | NO | | NULL | |
+----------+-------------+------+-----+---------+-------+
当我想验证用户的密码时,我遇到了一些麻烦。我没有得到二进制的结果密码。有什么建议么?谢谢。
$username = mysql_real_escape_string($_POST['username']);
$password = sha1(mysql_real_escape_string($_POST['password']));
$binPass = pack("H*", $password);
$query = "SELECT * FROM `user` WHERE `username` = '$username' AND `password` = $binPass;";
【问题讨论】:
-
为什么将其存储为二进制 blob 而不是十六进制字符串?你已经拥有了,不妨使用它。此外,这是强制提及梨树中的 bcrypt/pbkdf2/scrypt/partridges 作为比无盐 SHA1 更好的选择。
-
我的密码存储基于此answer。