Репликация хеширования паролей PHPBB в ASP.net c #

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

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

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

Username | Password |  Hash  |  Salt

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

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

UserID | Password |  Hash  |  Salt  |  PHPBBHash

Когда пользователь входит в систему, если установлено хеш-поле PHPBB, он хеширует пароль с хешем PHPBB. Затем, если вход успешен, он удаляет PHPBBHash поле d и создает текущие системные хеш-значения. Таким образом, происходит плавный переход от 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

Используя пример кода из ответа Vishalgiris, мы делаем следующее:

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

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

7
задан Tom Gullen 29 March 2011 в 21:40
поделиться