Я пытаюсь преобразовать тестовый пароль (test4) в хэш-код phpbb3. Это код, который я пробовал:
<?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
Я пробовал это на двух разных хостах без везения. Иначе есть ли онлайн-сервис, который просто преобразует текст в хэш?
заранее спасибо
Я предполагаю, что ваш файл functions_phpbb.php
является копией файла includes/functions.php
пакета phpBB3.
Теперь причина, по которой вы получаете эту ошибку, состоит в том, что функция phpbb_hash
использует функцию phpBB unique_id
для энтропии, которая зависит от соединения с базой данных (для изменения и сохранения энтропии при каждом запросе).
Есть два способа исправить это.
a) включить phpBB common.php
, который загрузит ваш код для phpBB (включая соединение db, обработчики ошибок и т. д.).
b) phpBB3 использует phpass для хеширования. Я предлагаю вам просто загрузить автономный пакет phpass и использовать его для генерации хэша.
Небольшое предостережение: phpBB3 изменяет хэш-идентификатор с '$ P $' на $ H $ (не спрашивайте меня почему), поэтому вам придется изменить эту строку:
$output = '$P$';
чтобы:
$output = '$H$';
Поскольку опция a) добавляет некоторые накладные расходы, и вы, вероятно, только хотите использовать хеширующие функции, я бы предложил вариант b).
Может быть, наоборот. Я использовал библиотеку из: http://www.openwall.com/phpass/. Чтобы заставить ее работать, вы должны изменить первые 3 символа сгенерированного HASH:
$P$
в
$H$
используется в phpbb
Интересно, почему они запускают хэш-пароль с помощью функции escaping SQL … но вы могли бы просто попытаться определить эту функцию как манекен:
function sql_escape($str) { return $str; }