2011-03-13 64 views
4

我想将测试密码(testing4)转换为phpbb3哈希。这是我试过的代码:如何将文本转换为phpbb哈希?

<?php 
/** 
* 
* @package phpBB3 
* @version $Id: v3_dbal.xml 44 2007-07-25 11:06:55Z smithy_dll $ 
* @copyright (c) 2005 phpBB Group 
* @license http://opensource.org/licenses/gpl-license.php GNU Public License 
* 
*/ 

/** 
* @ignore 
*/ 
define('IN_PHPBB', true); 
include ("functions_phpbb.php"); 

$data['new_password'] = "testing4"; 

$user_row = array(
    'user_password' => phpbb_hash($data['new_password']) 
    ); 

$hash = $user_row['user_password']; 

echo $hash; 
?> 

,这不工作之一:

$pass = "testing4"; 
$hash = phpbb_hash($pass); 

这两次我收到以下错误信息:

Fatal error: Call to a member function sql_escape() on a non-object in /home/a8544020/public_html/Pass/functions_phpbb.php on line 149 

我已经尝试过了在2个不同的主机上没有任何运气。否则,是否有一个在线服务只是将文本转换为散列?

在此先感谢

回答

5

我假设你functions_phpbb.php文件是phpBB3软件包的includes/functions.php文件的副本。

现在,你得到这个错误的原因是因为phpbb_hash函数使用phpBB unique_id函数的熵,它依赖于数据库连接(在每个请求上改变和保持熵)。

有两种方法可以解决这个问题。

a)包含phpBB的common.php,它将引导您的代码为phpBB(包括数据库连接,错误处理程序等)。

b)phpBB3使用phpass进行散列。我建议你只需下载独立的phpass包并使用它来生成哈希。

小告诫:phpBB3的改变从 '$ P $' 到 '$ H $' 散列标识符(不要问我为什么),所以你必须要改变这一行:

$output = '$P$'; 

到:

$output = '$H$'; 

由于选项)增加了相当长的一段开销,你可能只想要使用散列函数,我建议选项b)。

+0

完美,谢谢! – Yesterday 2011-03-13 15:11:58

+1

作为一个方面说明,一个变化已被合并到phpBB中,这将使'P'工作,这将在phpBB 3.0.9中出现。 – igorw 2011-03-23 09:37:56

-1

我不知道他们为什么运行通过SQL避开功能密码散列..但是你可以简单地尝试定义一个函数为虚拟:

function sql_escape($str) { return $str; } 
+0

使用我什么时候会把这个? – Yesterday 2011-03-13 10:53:26

+0

我现在没有错误,但没有任何回应。 – Yesterday 2011-03-13 10:55:44

相关问题