Я сейчас использую 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);
Это на самом деле возвращает истину. Супер! Но кто-нибудь знает, почему это работает? Я сбит с толку, похоже, что соль вообще не учитывается.