我正在通过部署在开发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不够的情况吗?
答案 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 ...