无法验证Framework 4.6.1中的数据

时间:2018-06-29 14:22:50

标签: asp.net

最近我将项目从Framework 4.6升级到了4.6.1。我们开始面临以下问题:

我们结合所有css文件来生成一个通用的css文件。在此过程中,AjaxControlToolkit日历会创建一个WebResource.axd文件。当我们尝试处理该文件时,解密将失败,并引发错误,指出:“无法验证数据”。

使用以下代码:

var queryString = WebResourcePath.Split(new[] { '?' })[1];

        var stringBuilder = new StringBuilder();
        var textWriter = new StringWriter(stringBuilder);
        var context = new HttpContext(new SimpleWorkerRequest("/WebResource.axd", queryString, textWriter));

        var urlEncodedData = context.Request.QueryString["d"];

        var encryptedData = HttpServerUtility.UrlTokenDecode(urlEncodedData);

        var machineKeySection = typeof(MachineKeySection);
        var paramTypes = new Type[] { typeof(bool), typeof(byte[]), typeof(byte[]), typeof(int), typeof(int) };
        var encryptOrDecryptData = machineKeySection.GetMethod("EncryptOrDecryptData", BindingFlags.Static | BindingFlags.NonPublic, null, paramTypes, null);

        try
        {
            var decryptedData = (byte[])encryptOrDecryptData.Invoke(null, new object[] { false, encryptedData, null, 0, encryptedData.Length });
            var decryptedContent = Encoding.UTF8.GetString(decryptedData).Substring(1);
            var resourceParts = decryptedContent.Split('|');

            Assembly = AssemblyCache.Load(resourceParts[0]);
            ResourceName = resourceParts[1];
        }
        catch (Exception ex)
        {
            throw ex;
        }

在行上抛出错误:var cryptoedData =(byte [])encryptOrDecry ........

某些解决方案我建议使用静态机器密钥,但我们已经在这样做了。

注意:仅当我们将httpRuntime targetFramework设置为4.6.1时,才会发生这种情况,否则它将按预期工作。

1 个答案:

答案 0 :(得分:0)

来自forums.asp.net:

  

所以我们的问题是某些Webresource.axd请求被缓存   浏览器(我们不知道...),但是我们的机器键会更改。

     

修复Web.config中的machineKeys,然后等待所有用户清理   他们的浏览器缓存。

评论:
https://forums.asp.net/post/5620791.aspx

全线程: https://forums.asp.net/t/1963234.aspx?Unable+to+validate+data+EncryptOrDecryptData+problem

希望有帮助