无法验证计算机密钥设置为 SHA1 时的数据错误
本文关键字:SHA1 数据 错误 设置 验证 计算机 密钥 | 更新日期: 2023-09-27 18:35:42
我在IIS 7.5中使用.NET 2.0运行时有一个简单的.net应用程序,其中我更改了web.config中的计算机密钥以使用以下方法:
<machineKey validationKey="AutoGenerate,IsolateApps" decryptionKey="AutoGenerate,IsolateApps" validation="SHA1"/>
这在本地工作正常,但是当我发布到服务器时,每当浏览网站时,我都会收到"HttpException (0x80004005):无法验证数据"。我已经确保设置编译调试="false"。将验证方法设置为 3DES 可消除此问题,但我们需要使用 SHA1。这里缺少一些配置选项吗?请参阅下面的堆栈跟踪。
[HttpException (0x80004005): Unable to validate data.] System.Web.Configuration.MachineKeySection.EncryptOrDecryptData(Boolean fEncrypt, Byte[] buf, Byte[] modifier, Int32 start, Int32 length, IVType ivType, Boolean useValidationSymAlgo, Boolean signData) +1008 System.Web.Configuration.MachineKeySection.EncryptOrDecryptData(Boolean fEncrypt, Byte[] buf, Byte[] modifier, Int32 start, Int32 length, IVType ivType, Boolean useValidationSymAlgo) +91 System.Web.UI.Page.EncryptStringWithIV(String s, IVType ivType) +83 System.Web.UI.Page.EncryptString(String s) +30 System.Web.Handlers.RuntimeScriptResourceHandler.GetScriptResourceUrlImpl(List`1 assemblyResourceLists, Boolean zip, Boolean notifyScriptLoaded) +1497 System.Web.Handlers.RuntimeScriptResourceHandler.System.Web.Handlers.IScriptResourceHandler.GetScriptResourceUrl(List`1 assemblyResourceLists, Boolean zip, Boolean notifyScriptLoaded) +1148 System.Web.Handlers.RuntimeScriptResourceHandler.System.Web.Handlers.IScriptResourceHandler.GetScriptResourceUrl(Assembly assembly, String resourceName, CultureInfo culture, Boolean zip, Boolean notifyScriptLoaded) +152 System.Web.Handlers.ScriptResourceHandler.GetScriptResourceUrl(Assembly assembly, String resourceName, CultureInfo culture, Boolean zip, Boolean notifyScriptLoaded) +37 System.Web.UI.ScriptManager.GetScriptResourceUrl(String resourceName, Assembly assembly) +105 System.Web.UI.ScriptRegistrationManager.RegisterClientScriptResource(Control control, Type type, String resourceName) +113 System.Web.UI.ScriptManager.System.Web.UI.IScriptManager.RegisterClientScriptResource(Control control, Type type, String resourceName) +14 System.Web.UI.ClientScriptManager.RegisterClientScriptResource(Control control, Type type, String resourceName) +53 System.Web.UI.WebControls.Menu.OnPreRender(EventArgs e, Boolean registerScript) +113 System.Web.UI.WebControls.Menu.OnPreRender(EventArgs e) +25 System.Web.UI.Control.PreRenderRecursiveInternal() +80 System.Web.UI.Control.PreRenderRecursiveInternal() +171 System.Web.UI.Control.PreRenderRecursiveInternal() +171 System.Web.UI.Control.PreRenderRecursiveInternal() +171 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +842
是否在真正的 .NET 2.0 应用池中运行应用程序?(我问是因为您使用的是IIS 7.5)。
如果没有,请记住,.NET 4.5 框架中的加密算法已发生更改。
如果需要与 <.NET 4.5 框架兼容,则需要兼容性标记:
<machineKey compatibilityMode="Framework20SP1" />
有关详细信息,请参阅 http://msdn.microsoft.com/en-us/library/system.web.configuration.machinekeysection.compatibilitymode.aspx 或 http://blogs.msdn.com/b/webdev/archive/2012/10/23/cryptographic-improvements-in-asp-net-4-5-pt-2.aspx。
我发现当"系统密码学:使用符合 fips 的算法进行加密、哈希和签名"(安全设置>>本地策略>>安全选项)的本地安全策略设置为 true 时,Sha1 将无法运行,这就是我在这种情况下收到错误的原因。