Replicar o hash da senha do PHPBB no asp.net c #

Estou usando o phpbb 3.0.8 no momento. Possui 3.000 usuários e cerca de 60.000 posts. Estou mudando o fórum para outro, escrito em ASP clássico (sei que as pessoas vão desaprovar isso, mas tenho boas razões).

site @My está escrito em ASP.net. O fórum ASP clássico tem uma API para conectar-se a ele. Eu configurei tudo isso e funciona bem. Eu escrevi meu próprio formulário de login.

Eu quero copiar todas as contas de usuário. O fórum atual tem a tabela:

Username | Password |  Hash  |  Salt

Eu substitui a técnica clássica de hash do ASP para agora usar o ASP.netSecurity.SHA1 jogo da velha. A senha é armazenada comoSHA1(rawpassword + salt).

Meu plano é armazenar novos campos ao lado dos atuais:

UserID | Password |  Hash  |  Salt  |  PHPBBHash

Quando o usuário faz login, se o campo de hash do PHPBB estiver definido, ele fará a hash da senha com o hash do PHPBB. Então, se o login for bem-sucedido, ele excluirá o campo PHPBBHash e criará os valores atuais de hash do sistema. Dessa forma, é uma transição suave do PHPBB para o novo fórum e ninguém perde suas conta

Meu problema é que, dado um hash PHPBB, um nome de usuário e senha, no ASP.net c #, como posso verificar o hash PHPBB? Como é calculado?

Minha preocupação também é que a função hash ASP clássica reivindicou ser SHA1, mas produziu resultados diferentes paraSecuriy.SHA1.

Edita

Eu coloquei uma recompensa nisso, se alguém puder me dar uma solução definitiva, agradeço a resposta relacionada aos recursos, mas ainda estou lutando para entendê-la.

Caso de test

Raw password:

blingblangblaow222

No banco de dados PHPBB3:

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

Usando o código de exemplo da resposta Vishalgiris, fazemos o seguinte:

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

Isso realmente retorna verdadeiro. Super! Mas alguém sabe por que isso funciona? Estou perplexo, não parece levar em conta o sal.

questionAnswers(3)

yourAnswerToTheQuestion