Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 表单身份验证票据是否可以用PHP解密?_C#_.net_Php_Authentication_Encryption - Fatal编程技术网

C# 表单身份验证票据是否可以用PHP解密?

C# 表单身份验证票据是否可以用PHP解密?,c#,.net,php,authentication,encryption,C#,.net,Php,Authentication,Encryption,我是一名PHP开发人员,对.NET几乎一无所知。工作中的.NET人员要求我将解密身份验证票证的.NET代码翻译成PHP,这样PHP代码就可以为我的应用程序运行设置适当的会话变量。这可能吗?我盯着代码看,这让我很困惑。如果有人能告诉我这不是因为我不知道的原因而浪费时间,我会继续尝试。谢谢你的帮助 附加信息:我甚至可以在第一时间用PHP抓到票吗 如果您知道解密算法,您肯定可以在PHP中实现它。正如Gumbo所说,您需要考虑所涉及的算法。asp.net身份验证票证使用: 创建序列化表单 身份验证票证。

我是一名PHP开发人员,对.NET几乎一无所知。工作中的.NET人员要求我将解密身份验证票证的.NET代码翻译成PHP,这样PHP代码就可以为我的应用程序运行设置适当的会话变量。这可能吗?我盯着代码看,这让我很困惑。如果有人能告诉我这不是因为我不知道的原因而浪费时间,我会继续尝试。谢谢你的帮助


附加信息:我甚至可以在第一时间用PHP抓到票吗

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

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

  • 创建序列化表单 身份验证票证。字节数组 票的代表是 创造
  • 在表格上签名以验证身份 票。消息身份验证 字节数组的代码(MAC)值 通过使用该算法计算 和验证指定的密钥 和validationKey属性 机关枪元件。默认情况下 采用SHA1算法
  • 加密表单身份验证票据。 已删除的第二个字节数组 通过使用 密码的加密方法 FormsAuthentication类。这个 Encrypt方法在内部使用 指定的算法和密钥 解密和解密密钥 机器钥匙上的属性 元素。ASP.NET 1.1版使用 默认情况下使用3DES算法。 ASP.NET 2.0版使用 默认情况下,Rinjdael(AES)算法
  • 表单验证票证是 用于告诉ASP.NET应用程序 你是谁。因此,门票正在建设中 表单块的身份验证 安全

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

    如果应用程序部署在 Web场,您必须确保 每个服务器上的配置文件 共享相同的值 验证密钥和解密密钥 标记中的属性, 用于哈希和 分别对票据进行解密。 你必须这样做,因为你不能 保证哪台服务器将处理 连续的请求。更多 关于 FormsAuthentication票证加密 和Web场部署 考虑到这些因素,请访问以下网站 MSDN网站:


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

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

    确保使用默认值,即AES和SHA1。 现在您有了AES解密密钥,请将其存储在某个地方,因为您将需要它在php端。 在您的dotnet应用程序中,进入web.config并获取表单auth cookie名称,通常类似于.ASPXAUTH

    现在转到PHP端。下载并设置一个AES加密库,如下图所示

    然后在PHP中,您可以执行以下操作(这使用phpsec库):

    现在得到的结果将首先是pm+SHA1哈希+身份验证票证的一个字节表示。必须将序列化的字节转换为字符串以使其可读。在最后一步,其他人能发光吗

    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);