Репликация хеширования пароля PHPBB в ASP.net c # - PullRequest
7 голосов
/ 21 марта 2011

Я сейчас использую phpbb 3.0.8. Он имеет 3000 пользователей и около 60000 сообщений. Я меняю форум на другой, написанный на классическом ASP (я знаю, что люди не одобрят это, но у меня есть веские причины).

Мой сайт написан на ASP.net. Классический форум ASP имеет API для подключения к нему. Я все это настроил, и все отлично работает. Я написал свою собственную форму входа.

Я хочу скопировать все учетные записи пользователей. Текущий форум имеет таблицу:

Username | Password |  Hash  |  Salt

Я переопределил классическую технику хеширования ASP, чтобы теперь использовать хэш ASP.net Security.SHA1. Пароль хранится как SHA1(rawpassword + salt).

Мой план - хранить новые поля рядом с текущими:

UserID | Password |  Hash  |  Salt  |  PHPBBHash

Когда пользователь входит в систему, если установлено поле хеша PHPBB, он хэширует пароль с помощью хеша PHPBB. Затем, если вход в систему успешен, он удаляет поле PHPBBHash и создает текущие значения хэша системы. Таким образом, это плавный переход от PHPBB к новому форуму, и никто не потеряет свои учетные записи.

Моя проблема в том, что, учитывая хэш PHPBB, имя пользователя и пароль, в ASP.net c # как я могу проверить хэш PHPBB? Как это рассчитать?

Меня также беспокоит то, что классическая хеш-функция ASP объявила себя SHA1, но она дала результаты, отличные от Securiy.SHA1.

Редактировать

Я вознаграждаю за это, если кто-то может дать мне окончательное решение, я ценю ответ, связанный с ресурсами, но я все еще пытаюсь понять это.

Контрольный пример

Необработанный пароль:

blingblangblaow222

В базе данных PHPBB3:

username: Tom
username_clean: tom
user_password: $H$9ojo08A3LuhnkXR27p.WK7dJmOdazh0
user_passchg: 1301433947
user_form_salt: 637f480dfdab84ef

Используя пример кода из ответа Вишальгириса, мы делаем это:

phpBB.phpBBCryptoServiceProvider cPhpBB = new phpBB.phpBBCryptoServiceProvider();
string remoteHash = "$H$9ojo08A3LuhnkXR27p.WK7dJmOdazh0";
bool result = cPhpBB.phpbbCheckHash("blingblangblaow222", remoteHash);
Response.Write("<BR><BR><BR>" + result);

Это на самом деле возвращает истину. Супер! Но кто-нибудь знает, почему это работает? Я сбит с толку, похоже, что соль вообще не учитывается.

Ответы [ 3 ]

6 голосов
/ 21 марта 2011

Похоже, что PHPBB проверяет пароли с помощью функции phpbb_check_hash в functions.php исходном файле .Похоже, что для выполнения реальной работы обычно используется _hash_crypt_private.Функция имеет длину 57 строк (включая большое количество пробелов), поэтому преобразование ее в C # должно быть относительно простым.

3 голосов
/ 28 марта 2011

Похоже, ваш ответ здесь, в сообществе phpBB , однако, как вы уже знаете, это соленый хеш, поэтому вам нужно использовать функцию, указанную в ссылке, чтобы проверить свой пароль, потому что хеш изменитсяпри создании.

Пожалуйста, игнорируйте, если вы уже пробовали код, указанный в ссылке.

Надеюсь, это поможет ...


Еще один вариант - создатьОтдельная страница / служба php, для хеширования пароля или проверки хеша.для создания используется функция "phpbb_hash", а для проверки - "phpbb_check_hash", и эти функции могут быть доступны ASP или ASP.NET через страницу или службу.

2 голосов
/ 25 марта 2011

Вы также можете настроить текущую систему Phpbb так, чтобы в ней хэш-пароль SHA1 вводился при входе в систему. Если вы запустите эту настройку некоторое время, вы охватите большинство активных пользователей, и это избавит вас от необходимости реализовывать сложный алгоритм. Не очень активные пользователи могут просто запросить новый пароль, когда они не могут войти в систему, или вы все можете дать им новый пароль и отправить его им по почте (вы можете выбрать их в последний день входа в систему, сохраненный в базе данных Phpbb).

В зависимости от ваших потребностей, вы также можете использовать функцию автоматического входа в Phpbb. Пользователи, использующие эту функцию, могут даже не знать своих паролей и, следовательно, им будет сложно войти в вашу новую систему, если она не поддерживает автоматический вход в систему.

...