解密使用FormsAuthentication.Encrypt加密的数据

时间:2013-04-12 01:43:37

标签: asp.net forms-authentication webforms

我正在通过部署在开发Web场上的.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(布尔   fEncrypt,Byte [] buf,Byte []修饰符,Int32 start,Int32 length,   Boolean useValidationSymAlgo,Boolean useLegacyMode,IVType ivType,   布尔符号数据)at   System.Web.Security.FormsAuthentication.Decrypt(字符串   encryptedTicket)在TuoVanitySite.Default.Page_Load(对象发送者,   EventArgs e)in   C:\ SRC \ ets_2008 \主\ ebtDev \沙箱\ rrozinov \ TuoVanitySite \ TuoVanitySite \ Default.aspx.cs:线   22

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

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

任何人都处理过machineKey不够的情况吗?

2 个答案:

答案 0 :(得分:1)

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

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

使它有点有趣的是,无论我是否放置SHA1或3DES,我的代码都可以解密。我确实确认服务器使用的是默认SHA1。我仍然愿意为教育目的寻找根本原因。

答案 1 :(得分:0)

如“How To: Configure MachineKey in ASP.NET 2.0”文章中所述:

  

即使验证设置为AES或3DES

,也会使用HMACSHA1

所以可能的情况是,如果兼容模式设置为Framework20SP1或Framework20SP2,那么无论验证属性中设置什么,它都使用SHA1。

目前我正在努力解决类似任务 - 在Windows Server 2012上的IIS8上部署的ASP.Net 4.0和3.5SP1 Web应用程序之间设置单点登录。由于Win2k12具有.Net 4.5,因此变得更加复杂。 1是“就地”升级到4.0 ...