0

我正在部署在开发网络场上的 .Net 4.0 ASP.Net Web 应用程序中通过 FormsAuthentication.Encrypt(data) 将数据加密到 cookie 中。我已经指定了一个 machineKey 属性来对 ValidationKey、DecryptionKey 和 Decryption(算法)进行硬编码。
现在,我正在尝试使用我在开发工作站上构建的应用程序来解密该 cookie。我可以通过 Request.Cookies["CookieName"] 获取 cookie,但是当我尝试通过 FormsAuthentication.Decrypt(encCookie) 解密该值时,出现以下错误:

无法验证数据。在 System.Web.Configuration.MachineKeySection.EncryptOrDecryptData(Boolean fEncrypt, Byte[] buf, Byte[] 修饰符, Int32 开始, Int32 长度, Boolean useValidationSymAlgo, Boolean useLegacyMode, IVType ivType, Boolean signData) 在 System.Web.Security.FormsAuthentication .Decrypt(String encryptedTicket) at TuoVanitySite.Default.Page_Load(Object sender, EventArgs e) in c:\src\ets_2008\main\ebtDev\Sandboxes\rrozinov\TuoVanitySite\TuoVanitySite\Default.aspx.cs:line 22

这是我的网络配置中的模糊(键已删除):

<machineKey 
  validationKey="keyA" 
  decryptionKey="keyB" 
  decryption="3DES" 
  compatibilityMode="Framework20SP1"/>

有人处理过 machineKey 不够用的这种情况吗?

4

2 回答 2

1

好的,我能够找到解决问题的方法,但是我不确定为什么会这样。我必须将验证属性添加到 machineKey:

<machineKey 
  validationKey="keyA" 
  decryptionKey="keyB" 
  validation="SHA1"
  decryption="3DES" 
  compatibilityMode="Framework20SP1"/>

让它有点有趣的是,无论我使用 SHA1 还是 3DES,我的代码都可以很好地解密。我确实确认服务器使用的是默认 SHA1。我仍然愿意为教育目的找到根本原因。

于 2013-04-12T07:00:51.300 回答
0

正如“如何:在 ASP.NET 2.0 中配置 MachineKey ”一文中所述:

即使验证设置为 AES 或 3DES,也会使用 HMACSHA1

因此,如果兼容性模式设置为 Framework20SP1 或 Framework20SP2,则可能会使用 SHA1,而不管验证属性中设置了什么。

我目前正在为类似的任务而苦苦挣扎 - 在 Windows Server 2012 上的 IIS8 上部署的 ASP.Net 4.0 和 3.5SP1 Web 应用程序之间设置单点登录。它变得更加复杂,因为 Win2k12 具有 .Net 4.5.1,即“就地”升级到 4.0...

于 2013-12-27T23:16:54.527 回答