如何在php中使用Bcrypt来加密密码和注册以及登录过程

时间:2013-05-17 21:26:55

标签: php mysql bcrypt

我有一个注册页面,允许用户输入其中一个密码的信息,因此必须加密或散列,以便使用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.php

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);

2 个答案:

答案 0 :(得分:0)

除了我会将WHERE email_address='$email'AND password= '$hash'的login.php查询写入WHERE email_address='$email' AND password='$hash'

之外,我看起来不错

确保包含密码哈希的列数据类型足够长,以包含用户将输入的任何密码。如果额外的数据字节不是问题,那么将列设置为varchar(255)以确保MySQL在保存时不会破坏哈希的结束。

我会查看一些内置的加密库。它们自从PHP 5.5以来就已经更新了,如果它不能正常工作,它可能会为你完成工作。

http://www.php.net/manual/en/refs.crypto.php

我过去使用md5没有任何问题,如果你真的担心超级安全,请查看php内置的mcrypt库。您也可以“密封”密码,以确保密码安全。

答案 1 :(得分:0)

你显然使用第三方库进行Bcrypt散列。 PHP内置了bcrypt功能,我想这个库是它的包装器。但我无法确定,因为我不认识你正在使用的库,所以我不能就如何使用它提供具体的建议(除了遵循它的文档)。

考虑到我无法识别您正在使用的库这一事实,代码的bcrypt部分中没有明显的错误。 (sql查询的变量没有在任何地方定义,但我想这是因为你只向我们展示了一段代码)

如果您没有使用此库,我建议您可以查看其他库;我能想到的有两个很好看:

  • password_compat
    这是由执行PHP核心中所有安全代码的同一个人编写的。在PHP 5.5(即将发布)中,他们引入了一组新的password_xxx()函数。该库在纯PHP代码中实现了相同的功能,因此它们可以在PHP 5.3或5.4中运行。因此,如果您想要与未来的PHP版本兼容,那么这个库是一个很好的选择。

  • PHP-Password
    同一作者的稍大的库。同样好,但使用面向对象的API而不是模仿PHP 5.5函数。如果你想要一个通用的实用程序库来使它易于处理完全安全的密码,那么这就是我推荐的那个。

这两个库都在幕后使用最新的bcrypt算法。

[编辑] 密码字段长度。如评论中所述,您需要至少60个字符长的字段来存储bcrypt哈希。您当前的20个字符限制不适用于任何类型的哈希算法。