Я сейчас работаю над точно такой же проблемой. Решение, которое я придумал, состояло в том, чтобы вызвать функцию php напрямую через внешний вызов:
[DllImport( "php5ts.dll", EntryPoint = "crypt", CharSet = CharSet.Ansi )]
private static extern string crypt( string str, string salt );
Это хорошо работает для php версии 5.2.10 при запуске локального сервера WebDev, IIS5 и IIS6, но если вы используете II7, рабочий процесс ASP.Net завершается с необработанным исключением. (Я обновлю свой ответ, как только найду решение)
Мы также включили флаг типа пароля, чтобы позволить нам использовать реализацию .Net MD5 для всех новых пользователей и беспрепятственно преобразовывать существующих пользователей, когда они обновляют свои данные.
Обновление: Вероятно, проблема с обращением к php5ts.dll напрямую из IIS7 сводится к использованию 64-битных окон, поэтому это решение может работать на 32-битной установке Windows 7 или Server 2008, однако Я не могу проверить это. Как выяснилось, наш существующий сайт использовал DES, поэтому мы смогли использовать реализацию крипта от CodeProject, спасибо за ссылку, Майк.