我有一个注册页面,允许用户输入信息,其中一个密码,所以它必须被加密或散列,所以使用Bcrypt,它在寄存器上工作
但是当涉及到登录时,我不知道在哪里以及如何使用它
有人能帮我吗?
register.php:
require_once('Bcrypt.php');
$bcrypt = new Bcrypt(15);
$hash = $bcrypt->hash('$pass1');
//********Insert all the members's input to the database**************//
$query = mysql_query("INSERT INTO members
(user_name, first_name, last_name,
governorate, district, village,
birth_date, email_address,
specialization, password, registered_date)
VALUES
('$username', '$firstname', '$lastname',
'$governorate', '$district', '$village',
'$bdate', '$email', '$specialization',
' $hash', now())")
or die("could not insert data");
login。
require_once('Bcrypt.php');
$bcrypt = new Bcrypt(15);
$hash = $bcrypt->hash('$pass');
$isGood = $bcrypt->verify('$pass', $hash);
$sql=mysql_query("SELECT user_id, email_address,
first_name, user_name
FROM members
WHERE email_address='$email'AND password= '$hash'
LIMIT 1") or die("error in members table");
$login_check = mysql_num_rows($sql);
它看起来很好,除了我要写从WHERE email_address='$email'AND password= '$hash'
到WHERE email_address='$email' AND password='$hash'
的login.php查询
确保保存密码散列的列数据类型足够长,以包含用户将输入的任何密码。如果额外的数据字节不是问题,那么将列设置为varchar(255),以确保MySQL在保存散列时不会切断散列的末尾。
我会检查一些内置的加密库。他们已经更新自php 5.5和可能会为你做的工作,如果它是不正常工作的加密。
http://www.php.net/manual/en/refs.crypto.php我过去使用md5没有问题,如果你真的担心它的超级安全检查php的内置mcrypt库。你也可以"盐"密码,以确保他们进入安全。
您显然在使用第三方库进行Bcrypt哈希。PHP有内置的bcrypt功能,我猜这个库是它的包装器。但是我不能确定,因为我不认识你正在使用的库,所以我不能给出关于如何使用它的具体建议(除了遵循它的文档)。
考虑到我不认识你正在使用的库的事实,在你的代码的加密部分没有任何明显的错误。(sql查询有变量没有定义在任何地方,但我猜这是因为你只显示了我们的代码片段)
如果你对这个库没有任何收获,我建议你看看其他的库;我能想到的有两个值得一看的
-
password_compat
这是PHP核心中负责安全代码的人写的。在PHP 5.5(即将发布)中,他们引入了一组新的password_xxx()
函数。这个库用纯PHP代码实现了这些相同的函数,因此它们可以在PHP 5.3或5.4中运行。因此,如果你想与未来的PHP版本兼容,这个库是一个很好的选择。 -
PHP-Password
同一作者写的稍微老一点的图书馆。同样好,但是使用面向对象的API,而不是模仿PHP 5.5的函数。如果你想要一个通用的实用程序库,使它非常容易地处理密码和完全的安全性,这是我推荐的。
这两个库在幕后都使用了最新的bcrypt算法。
[EDIT]密码字段长度。正如评论中提到的,您需要至少60个字符长的字段来存储比特币散列。当前的20个字符限制不适用于任何类型的哈希算法。