PHP可以使用表单身份验证票证解密吗?

时间:2009-02-23 18:11:06

标签: c# .net php authentication encryption

我是一名PHP开发人员,几乎不了解.NET。 .NET工作人员已经要求我将用于解密身份验证票证的.NET代码转换为PHP,以便PHP代码可以为我的应用程序设置适当的会话变量来运行。这甚至可能吗?我正盯着代码,这让我感到困惑。我会继续尝试,如果有人能告诉我这不是浪费时间因为某种原因我甚至都不知道。谢谢你的帮助!

其他信息:我是否可以首先使用PHP获取票证?

4 个答案:

答案 0 :(得分:5)

首先,打开你的machine.config并添加一个machinekey条目。根据aspnet 2.0的machinekey生成器中随机生成的密钥和验证密钥设置解密密钥和验证密钥。

一定要使用默认值,即。 AES和SHA1。 现在您已经拥有AES解密密钥,将其存储在某处,因为您将需要在php端使用它。 在你的dot net应用程序中,进入web.config并获取表单auth cookie名称,通常类似于.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哈希+ auth票证的字节表示。您必须将序列化字节转换为字符串以使其可读。其他人可以在最后一步发光吗?

答案 1 :(得分:1)

正如Gumbo所说,你需要考虑所涉及的算法。 asp.net身份验证票证使用:

  1. 创建序列化表单 身份验证票。一个字节数组 机票的代表是 创建。
  2. 签署表单身份验证 票。消息验证 字节数组的代码(MAC)值 通过使用该算法计算 和验证指定的密钥 和的validationKey属性 machineKey元素。默认情况下 使用SHA1算法。
  3. 加密表单身份验证票证。 已经存在的第二个字节数组 创建使用 加密方法 FormsAuthentication类。该 加密方法在内部使用 算法和密钥由 解密和解密密钥 machineKey上的属性 元件。 ASP.NET 1.1版使用 默认情况下为3DES算法。 ASP.NET 2.0版使用了 Rinjdael(AES)算法默认。

答案 2 :(得分:1)

来自Microsoft KB

  

表单身份验证票证是   用于告诉ASP.NET应用程序   你是谁。因此,门票正在建设中   表格身份验证块   安全

     

故障单已加密并签名   使用配置   服务器的Machine.config的元素   文件。 ASP.NET 2.0使用   decryptionKey和新的解密   元素的属性   加密表单身份验证   门票。解密属性允许   您指定加密算法   使用。 ASP.NET 1.1和1.0使用3DES   加密,不可配置。   篡改票价值是   由未能解密而确定   服务器上的票证。结果,   用户将被重定向到登录   页。

     

如果应用程序部署在   Web场,你必须确保   每台服务器上的配置文件   为...分享相同的价值   validationKey和decryptionKey   标签中的属性,   用于散列和   分别解密票证。   你必须这样做,因为你做不到   保证哪个服务器将处理   连续的请求。更多   相关信息   FormsAuthenticationTicket加密   和Web场部署   考虑,请访问以下内容   MSDN网站:

因此,您可以指定要遵循的加密/解密算法和密钥。您可以在PHP中使用相同的解密逻辑。

答案 3 :(得分:0)

如果你知道解密算法,你肯定可以在PHP中实现它。