Я разработчик PHP, который почти ничего не знает о .NET. Меня попросили ребята .NET на работе перевести .NET-код, который расшифровывает аутентификационный билет на PHP, чтобы PHP-код мог установить соответствующие переменные сеанса для моего приложения. Возможно ли это? Я смотрю на код, и это меня озадачивает. Я буду продолжать пытаться, если кто-то скажет мне, что это не пустая трата времени по какой-то причине, о которой я даже не знаю. Спасибо за любую помощь!
Дополнительная информация: Можно ли даже захватить билет с помощью PHP в первую очередь?
Как сказал Гумбо, вам нужно учитывать задействованные алгоритмы. Билет проверки asp.net использует:
Во-первых, откройте файл machine.config и добавьте запись machinekey. Установите ключ дешифрования и ключ проверки в соответствии с произвольно сгенерированными из генератора машинных клавиш для aspnet 2.0.
Обязательно используйте настройки по умолчанию, т.е. AES и SHA1. Теперь, когда у вас есть ключ расшифровки AES, сохраните его где-нибудь, потому что вам понадобится его на стороне php. В вашем сетевом приложении dot перейдите в файл web.config и получите имя файла cookie auth, как правило, что-то вроде .ASPXAUTH
Теперь перейдите на сторону PHP. Загрузите и настройте библиотеку шифрования AES, подобную этой, http://phpseclib.sourceforge.net/documentation/
Затем в PHP вы можете сделать что-то вроде этого (это использует phpsec lib):
set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib'); include('Crypt/AES.php'); $authCookie = $_COOKIE['_ASPXAUTH']; echo $authCookie; $aes = new Crypt_AES(); $aes->setKey('BCDCBE123654F3E365C24E0498346EB95226A307857B9BDE8EBA6198ACF7F03C'); echo $aes->decrypt($authCookie);
Теперь то, что в итоге выходит, будет состоять в том, чтобы сначала PM + SHA1 hash + байтовое представление билета auth. Вы должны преобразовать сериализованные байты в строку, чтобы сделать ее читаемой. Может ли кто-нибудь добавить на этом последнем этапе?
Из Microsoft KB
Билет проверки подлинности форм используется для указания приложения ASP.NET, которым вы являетесь. Таким образом, билет является строительным блоком безопасности аутентификации Forms.
Билет зашифрован и подписан с использованием элемента конфигурации файла Machine.config сервера. ASP.NET 2.0 использует decryptionKey и новый атрибут дешифрования элемента для шифрования билетов проверки подлинности. Атрибут дешифрования позволяет указать алгоритм шифрования. ASP.NET 1.1 и 1.0 используют шифрование 3DES, которое не настраивается. Вмешательство с значением билета определяется неспособностью расшифровать билет на сервере. В результате пользователь будет перенаправлен на страницу входа в систему.
Если приложение развернуто в веб-ферме, вы должны убедиться, что файлы конфигурации на каждом сервере имеют одинаковое значение для атрибутов validationKey и decryptionKey в теге, которые используются для хэширования и дешифрования билета соответственно. Вы должны сделать это, потому что вы не можете гарантировать, какой сервер будет обрабатывать последовательные запросы. Для получения дополнительной информации о процедурах шифрования FormsAuthenticationTicket и развертывания веб-фермы посетите следующий веб-узел MSDN:
Таким образом, вы можете указать, какой алгоритм шифрования / дешифрования следует и ключ. Вы можете использовать одну и ту же логику дешифрования в PHP.
Если вы знаете алгоритм дешифрования, вы можете реализовать его на PHP.