我需要在 PHP 中撤消以下 ASP.Net 进程,以便可以获取票证中的用户名和到期日期。我已经解密了 3DES 加密(下面的步骤 3),但我不确定下一步需要做什么。解密得到的字符串是字节数组吗?我应该能够将其转换为ascii 吗? (因为事实并非如此)。
ASP.Net 是如何创建票证的:
- 序列化用户名、过期时间和其他数据(我不关心)。创建一个字节数组。
- 使用 SHA1 对票据进行签名(sig 是最后 20 个字节)
- 使用 3DES 加密票证(我已将其解密)。
我返回的东西看起来像这样:
6E 85 A4 39 71 31 46 BB A3 F6 BE 1A 07 EE A4 CE 5F 03 C8 D1 4C 97 5D 6A 52 D1 C4 82 75 5E 53 06 7B 1D D2 4D BF 22 40 F7 F4 B8 8D B0 C3 EC E5 BE F7 5 2 C2 DF 00 7A D1 CB BC 76 4B 10 33 2D 1A B4 15 A7 BB D6 9D BF 41 69 D2 C4 43 4A 26 95 01 F2 06 AA 46 2C 96 CC AD DC 08 59 C0 64 B6 EE 2C 5F CA ED 8B 92 1C 80 FD FF DC 61 67 28 59 CB E6 71 C6 C3 72 0E D0 32 69 22 57 4E 40 2B DA 67 BA 7F F1 C5 78 BC DF 80 8C D8 F2 8B 19 E2 A4 4F 7C 8C D9 97 37 BD B5 5B 0A 66 9B DD E7 DC 7B 78 F4 F8
它没有映射到 ascii,接下来我该怎么办?我有 SHA1 验证密钥。谢谢你的帮助!
我认为这是不可能的...
几个先决问题:
- 您确定已正确解密该字符串吗?
MachineKey
值和解密算法?我知道 ASP.NET 1.0 使用 3DES,但较新的版本通常默认使用 AES。
- 您首先为什么要访问这些数据?这
FormsAuthenticationTicket
并不是要“破坏”,如果您要从不同的语言访问这些值,您可以考虑推出自己的方案。
一些值得注意的观察结果:
Buried 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 http://msdn.microsoft.com/en-us/library/ms998288.aspx#paght000007_formsauthenticationtickets也可以提供一些帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)