使用DataProtection解密时抛出「The payload was invalid」错误的解决咨询
.NET Framework 4.8加密后.NET 6解密报「The payload was invalid」的解决方法
问题场景
通过.NET Framework 4.8加密字符串,代码如下:
var dataProtectionProvider = DataProtectionProvider.Create(new DirectoryInfo(@"d:\SharedKeys\"), builder => { builder.SetApplicationName("myApp"); }); var dataProtector = dataProtectionProvider.CreateProtector("Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationMiddleware", "Cookies", "v2"); var text = dataProtector.Protect("abc");
得到的密文为:
CfDJ8GHt0XxGzaFBlFEwKShBTYZTKFl3jI6DiCAmTaackE0ymGCf_WeBXN2CL4RHN1i9o5kK5fms-9ZmFHV8-e-3bRd0yR5YOxBdcQoxajS9vCe5lrMNZ0gze0PZ-yfV8kqSMQ
使用.NET SDK 6.0解密时,代码如下:
var protectionProvider = DataProtectionProvider.Create( new DirectoryInfo(@"d:\SharedKeys\"), cfg => cfg.SetApplicationName("myApp")); var dataProtector = protectionProvider.CreateProtector( "Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationMiddleware", "Cookie", "v2"); var result = dataProtector.Unprotect( "CfDJ8GHt0XxGzaFBlFEwKShBTYZTKFl3jI6DiCAmTaackE0ymGCf_WeBXN2CL4RHN1i9o5kK5fms-9ZmFHV8-e-3bRd0yR5YOxBdcQoxajS9vCe5lrMNZ0gze0PZ-yfV8kqSMQ");
运行后抛出错误「The payload was invalid」,错误触发代码:
if (!CryptoUtil.TimeConstantBuffersAreEqual(correctHash, 0, correctHash.Length, protectedPayload.Array!, macOffset, eofOffset - macOffset)) { throw Error.CryptCommon_PayloadInvalid(); // integrity check failure }
经排查为MAC校验不正确。
解决方法
问题核心是加密与解密时CreateProtector的参数不匹配:
- 加密代码中第二个参数为
"Cookies"(复数) - 解密代码中对应参数写成了
"Cookie"(单数)
CreateProtector的参数会参与生成加密的目的字符串,参数不一致会直接导致MAC校验失败。只需将解密代码中的第二个参数改为"Cookies"即可,修正后的解密代码如下:
var protectionProvider = DataProtectionProvider.Create( new DirectoryInfo(@"d:\SharedKeys\"), cfg => cfg.SetApplicationName("myApp")); var dataProtector = protectionProvider.CreateProtector( "Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationMiddleware", "Cookies", "v2"); var result = dataProtector.Unprotect( "CfDJ8GHt0XxGzaFBlFEwKShBTYZTKFl3jI6DiCAmTaackE0ymGCf_WeBXN2CL4RHN1i9o5kK5fms-9ZmFHV8-e-3bRd0yR5YOxBdcQoxajS9vCe5lrMNZ0gze0PZ-yfV8kqSMQ");
内容的提问来源于stack exchange,提问作者user2661881
相关产品推荐
相关产品推荐

