我需要在PHP中撤消以下ASP.Net进程,以便我可以获取故障单中的用户名和到期日期。我已经解密了3DES加密(下面的步骤3),但我不确定接下来我需要做什么。解密产生的字符串是字节数组吗?我应该能够将其转换为ascii吗? (因为它没有)。
ASP.Net用什么来创建票证:
我找回了这样的东西:
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 52 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验证密钥。谢谢你的帮助!
答案 0 :(得分:2)
我认为这不可能......
一些先决条件问题:
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等),除非你知道隐藏在这种原生方法中的微软实现,否则你不会得到数据。
MSDN也可以提供一些帮助。
答案 1 :(得分:2)
我一直在努力,我已经设法在PHP中获取表单身份验证票证内容。
使用用于在.Net端加密的相同密钥解密故障单。为此,我正在使用http://www.navioo.com/php/docs/function.mcrypt-encrypt.php。
解密会在字符串末尾添加填充,我将其删除。
我留下了一个字符串,末尾有一个20字节的SHA1哈希值。最后20个字节(应该)匹配字符串第一部分的SHA1哈希值(字符串长度 - 20个字节)。我还在研究这一部分,试图弄清楚.NET如何将字节数组转换成可以被SHA1散列的单个数据块(所以我可以在PHP端做同样的事情)。
这就是它的全部内容。
答案 2 :(得分:1)
对于其他想要执行此操作的人,请注意ASP.NET使用的AES加密始终为16字节块大小,即PHP mcrypt术语中的MCRYPT_RIJNDAEL_128,并使用CBC模式。密钥长度(默认情况下为32字节/ 256位)由PHP根据提供的实际密钥确定。此外,解密数据的开头似乎已损坏,除非IV全为零(即“\ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 0 \ 0" )。
有关解码数据的详细信息,请参阅:http://www.codeproject.com/KB/aspnet/Forms_Auth_Internals.aspx