Прежде всего, вы не можете расшифровать, только если вы попытаетесь устранить неполадки и взломать расшифровку пароля, например, с помощью Brute Force техники и т. Д., Потому что в результате в результате PHP с помощью функции password_hash генерируется хешпароль, результат хеширования.По основной концепции хеширования не может быть обратимым, но сопоставимым.
Вы можете сравнить хэши паролей, используя функцию PHP password_verify (сравнение сохраненного хэша из базы данных с введенным паролем из вашего приложения C #),Если ваше требование действительно расшифровано, необходимо изменить фокус вашего поста, переосмыслить поиск и устранение неисправностей и взломать расшифровку пароля, например, используя метод Brute Force и т. Д.
Теперьдавайте перейдем к решению: у вас есть два способа:
a) Создать PHP WebService, параметризованный с «Clear Text» в качестве входного параметра, и получить результат вывода в виде зашифрованного текстового пароля;ядро веб-службы (в PHP) использует для шифрования параметр password_hash с параметром PASSWORD_BCRYPT.После этого ваш код C # использует зашифрованные данные и сравнивает этот выходной хэш с сохраненным хешем из базы данных;однако эта альтернатива требует больших усилий для обеспечения безопасности на уровнях WebServer и WebService.Например, ваш код C #, использующий эту веб-службу PHP, показан ниже:
WebClient webclient = new WebClient();
webclient.DownloadStringCompleted += new DownloadStringCompletedEventHandler(webclient_DownloadStringCompleted);
webclient.DownloadStringAsync(new Uri("http://ws.phpurl.com/?password=stackoverflow@12345"));
void webclient_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
string phpWsEncryptedPass = e.Result;
string databaseEncryptedPass = //TO DO: query Database
//using WHERE statement,
//parsing 'phpWsEncryptedPass' as parameter;
}
b) ИЛИ , скачайте двоичные файлы соответствующей версии PHP для Windowsчто вы работаете над ними, разбирайтесь в этих методах DLL с помощью приложения DLL Reflector (например, dotPeek ) и используйте функции C # Interop для импорта DLL, которые имеют password_hash и password_verify , чтобы использовать это в своем коде C #;вам нужно приложить усилия, чтобы открыть DLL, чтобы получить правильное объявление методов.Примечание: этот способ рекомендуется, поскольку ядро PHP, написанное на C / C ++ и код C #, может потреблять DLL PHP для двоичных файлов Windows, этот код ниже имеет пример для этого:
[DllImport(@"C:\ProgramFiles\PHP\php_mbstring.dll", CharSet = CharSet.Unicode)]
internal static extern IntPtr password_hash(string clearTextpassword, int option)
[DllImport(@"C:\ProgramFiles\PHP\php_mbstring.dll", CharSet = CharSet.Unicode)]
internal static extern bool password_verify(string clearTextpassword, string hash)
Вот и все.