Я не думаю, что это возможно ...
Несколько предварительных вопросов:
- Вы уверены, что правильно расшифровали строку с правильным значением
MachineKey
и алгоритмом дешифрования? Я знаю, что ASP.NET 1.0 использовал 3DES, но более новые версии обычно используют AES по умолчанию.
- Почему вы обращаетесь к этим данным в первую очередь?
FormsAuthenticationTicket
не был задуман как «сломанный», и если вы собираетесь получить доступ к этим значениям с другого языка, вы можете рассмотреть возможность применения собственной схемы.
Некоторые заслуживающие внимания наблюдения:
Похоронен in FormsAuthentication.Decrypt()
- это вызов UnsafeNativeMethods.CookieAuthParseTicket(...)
. Вот подпись:
[DllImport("webengine.dll", CharSet=CharSet.Unicode)]
internal static extern int CookieAuthParseTicket(byte[] pData, int iDataLen, StringBuilder szName, int iNameLen, StringBuilder szData, int iUserDataLen, StringBuilder szPath, int iPathLen, byte[] pBytes, long[] pDates);
Это анализирует то, что выглядит как байтовый массив, возвращенный из MachineKeySection.HexStringToByteArray()
(по-видимому, функция, которая, кажется, декодирует строку с использованием UTF-8) в отдельные элементы FormsAuthenticationTicket
.
Я могу только предположить, что независимо от того, какой метод декодирования вы используете (ASCII, UTF-16 и т. Д.), Вы не получите данные обратно, если не знаете реализацию Microsoft, скрытую в этом родном методе.
MSDN также может предложить некоторую помощь.