0

微信小程序库,注释掉cs.FlushFinalBlock()才能正常解码

微信开发 · gdlcf88 · 查看 64 次 · 于 35天前

       private static byte[] AES_Decrypt(String Input, byte[] Iv, byte[] Key)
       {
#if NET45
           RijndaelManaged aes = new RijndaelManaged();
#else
           SymmetricAlgorithm aes = Aes.Create();
#endif
           aes.KeySize = 128;//原始:256
           aes.BlockSize = 128;
           aes.Mode = CipherMode.CBC;
           aes.Padding = PaddingMode.PKCS7;
           aes.Key = Key;
           aes.IV = Iv;
           var decrypt = aes.CreateDecryptor(aes.Key, aes.IV);
           byte[] xBuff = null;
           using (var ms = new MemoryStream())
           {
               using (var cs = new CryptoStream(ms, decrypt, CryptoStreamMode.Write))
               {
                   //        cs.Read(decryptBytes, 0, decryptBytes.Length);
                   //        cs.Close();
                   //        ms.Close();

                   //cs.FlushFinalBlock();//用于解决第二次获取小程序Session解密出错的情况

                   byte[] xXml = Convert.FromBase64String(Input);
                   byte[] msg = new byte[xXml.Length + 32 - xXml.Length % 32];
                   Array.Copy(xXml, msg, xXml.Length);
                   cs.Write(xXml, 0, xXml.Length);
               }
               xBuff = decode2(ms.ToArray());
           }
           return xBuff;
       }

       private static byte[] decode2(byte[] decrypted)
       {
           int pad = (int)decrypted[decrypted.Length - 1];
           if (pad < 1 || pad > 32)
           {
               pad = 0;
           }
           byte[] res = new byte[decrypted.Length - pad];
           Array.Copy(decrypted, 0, res, 0, decrypted.Length - pad);
           return res;
       }



仅当将:
//cs.FlushFinalBlock();//用于解决第二次获取小程序Session解密出错的情况
注释去除后才能顺利执行,否则报错:
2019-07-19 20:28:29.426 +08:00 [ERR] Padding is invalid and cannot be removed.
System.Security.Cryptography.CryptographicException: Padding is invalid and cannot be removed.
  at Internal.Cryptography.UniversalCryptoDecryptor.DepadBlock(Byte[] block, Int32 offset, Int32 count)
  at Internal.Cryptography.UniversalCryptoDecryptor.UncheckedTransformFinalBlock(Byte[] inputBuffer, Int32 inputOffset, Int32 inputCount)
  at Internal.Cryptography.UniversalCryptoTransform.TransformFinalBlock(Byte[] inputBuffer, Int32 inputOffset, Int32 inputCount)
  at System.Security.Cryptography.CryptoStream.FlushFinalBlock()
  at System.Security.Cryptography.CryptoStream.Dispose(Boolean disposing)
  at Senparc.Weixin.WxOpen.Helpers.EncryptHelper.AES_Decrypt(String Input, Byte[] Iv, Byte[] Key)
  at Senparc.Weixin.WxOpen.Helpers.EncryptHelper.DecodeEncryptedData(String sessionKey, String encryptedData, String iv)
  at DentureMaster.Weixin.WeixinMiniProgramAppService.LoginGetIdentityUserAsync(WeixinMiniProgramLoginInputDto input) in D:\Projects\DentureMaster\DentureMaster\src\DentureMaster.Application\Weixin\WeixinMiniProgramAppService.cs:line 108
  at DentureMaster.Weixin.WeixinMiniProgramAppService.OnLogin(WeixinMiniProgramLoginInputDto input) in D:\Projects\DentureMaster\DentureMaster\src\DentureMaster.Application\Weixin\WeixinMiniProgramAppService.cs:line 70
  at lambda_method(Closure , Object )
  at Microsoft.Extensions.Internal.ObjectMethodExecutorAwaitable.Awaiter.GetResult()
  at Microsoft.AspNetCore.Mvc.Internal.ActionMethodExecutor.AwaitableObjectResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)
  at System.Threading.Tasks.ValueTask`1.get_Result()
  at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeActionMethodAsync()
  at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeNextActionFilterAsync()
  at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Rethrow(ActionExecutedContext context)
  at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
  at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeInnerFilterAsync()
  at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeNextExceptionFilterAsync()

请问是我的什么操作导致的,感谢
您尚未登陆,请:网站登录 or 微信登陆
共收到 1 条回复
0

盛小茶丫 34天前

请问你的.net环境是什么?是否能提供可供测试的输入参数?


热门话题 更多 >>

当前扩展缓存策略没有进行注册

gis008 29 个回复 • 查看 268 次 • 51天前

cpu满载

blezt 21 个回复 • 查看 393 次 • 41天前

SessionId无效

gdlcf88 10 个回复 • 查看 159 次 • 35天前

“Nested”的类型初始值设定项引发异常

dream0013 9 个回复 • 查看 219 次 • 93天前

Messagehandler问题

Jenny_Wu 7 个回复 • 查看 156 次 • 54天前

通过扫描临时二维码关注公众号

诀别十年 7 个回复 • 查看 98 次 • 39天前

素材管理-推送失败

cristi 6 个回复 • 查看 130 次 • 82天前

core环境下退款方法tenpayv3.refund方法失败

ericsy 6 个回复 • 查看 178 次 • 36天前

是否有拦截器

qq1170971516 5 个回复 • 查看 112 次 • 68天前

微信公众号不显示关注事件的content

jiangchen 4 个回复 • 查看 105 次 • 15天前

订阅号:自定义菜单,菜单推送失败

bj939496716 4 个回复 • 查看 276 次 • 120天前

QQ群
  • 1群:300313885 (2000人群 已满)
  • 2群:293958349 (1000人群 已满)
  • 3群:342319110 (2000人群 已满)
  • 4群:372212092 (500人群 已满)
  • 5群:377815480 (1000人群 已满)
  • 6群:425898825 (1000人群 已满)
  • 7群:482942254 (500人群 已满)
  • 8群:106230270 (500人群 已满)
  • 9群:539061281 (500人群 已满)
  • 10群(分布式缓存):246860933 Senparc.Weixin.Cache SDK 10群
  • 11群:553198593 (500人群 已满)
  • 12群(微信小程序):108830388 Senparc微信小程序 12群
  • 13群(开放平台):183424136 (500人群 已满)
  • 14群(视频学员):588231256 Senparc.Weixin SDK 14群
  • 15群(公众号/综合):289181996 Senparc.Weixin SDK 15群
  • 16群(开放平台):860626938 (500人群 已满)
  • 17群(开放平台):770615466 [17群 开放平台]SenparcSDK
  • NeuChar 技术交流群:618605800 NeuChar 开发交流群
  • SCF 技术交流群:147054579 SCF 开发交流群
微信开发宝典:《微信开发深度解析》

由 Senparc.Weixin SDK 作者耗时两年完成的微信开发图书《微信开发深度解析:公众号、小程序高效开发秘籍》已经出版!

历经2年精心雕琢,难得的“理论 + 实战案例 + 趟坑经验”总结,
从需求分析、策划,到账号申请、验证,再到全面的 API 及开发工具,
覆盖所有开发微信公众号(含订阅号、服务号和小程序)所需关键技能!

视频教程:《微信公众号+小程序快速开发》

由盛派课堂(盛派旗下独立教育品牌)制作,《微信开发深度解析》作者苏震巍先生主讲的《微信公众号+小程序快速开发》视频课程开课啦!

课程采用“理论+实战”的教学形式,结合部分《微信开发深度解析》内容,独立于书本,包含了更多的操作演示和案例展示,帮助大家从多个维度学习微信开发以及.NET开发过程中的诸多技巧。
课程包含两大部分:
1. 微信开发基础技能
2. 公众号及小程序案例实战
共计60课时,配有番外篇,目前视频已在网易云课堂上线。