最近由.net5.0升级到.net 6.0,看似无缝升级,结果在调用第三方支付通知验证的时候报错了,导致用户支付成功,却没能更新支付状态。

经分析,是因为第三方接口提供的demo代码.net版本较早,使用的RijndaelManaged类,相关解密代码如下:

 public static byte[] AESDecrypt(byte[] Data, byte[] Key){MemoryStream mStream = new MemoryStream(Data);RijndaelManaged aes = new RijndaelManaged();aes.Mode = CipherMode.ECB;aes.Padding = PaddingMode.PKCS7;aes.KeySize = 128;aes.Key = Key;CryptoStream cryptoStream = new CryptoStream(mStream, aes.CreateDecryptor(), CryptoStreamMode.Read);try{byte[] tmp = new byte[Data.Length + 32];int len = cryptoStream.Read(tmp, 0, Data.Length + 32);byte[] ret = new byte[len];Array.Copy(tmp, 0, ret, 0, len);return ret;}finally{cryptoStream.Close();mStream.Close();aes.Clear();}}

调试对比了.net 6.0和5.0的源代码,发现.net6.0在调用aes.CreateDecryptor()后,返回的对象由System.Security.Cryptography.RijndaelManagedTransform 类改为 Internal.Cryptography.UniversalCryptoDecryptor 类,导致代码中返回的len不一致。

尝试1:查找.net源码,将RijndaelManagedTransform放到本地源码中

结果:不可行,因调用的底层接口只能由System的dll进行调用;

尝试2:经过多次搜索,找到相关问题 RijndaelManaged Decryption behaves different in .NET 6 · Issue #56834 · dotnet/runtime · GitHub经过修改相关代码,测试通过,代码如下

  public static byte[] AESDecrypt(byte[] Data, byte[] Key){using var aes = Aes.Create();aes.KeySize = 128;aes.Key = Key; var plainText = aes.DecryptEcb(Data, PaddingMode.PKCS7);return plainText;}

.net 6.0 RijndaelManaged 解码变化相关推荐

  1. Android 5.0 API 的变化——开发人员注意

    Android 5.0 API变化 译自 http://developer.android.com/intl/zh-cn/about/versions/android-5.0.html -- By N ...

  2. Android 5.0有哪些变化

    Android 5.0 Changes 译自 http://developer.android.com/intl/zh-cn/about/versions/android-5.0-changes.ht ...

  3. android5.0+art模式,Android 5.0有哪些变化

    Android 5.0 Changes 前排渣翻译预警,如果你能提供更好更专业的翻译或者提出修改意见就好了-- 另外本篇只对Android 5.0特性作了说明,至于对应的API方面的变化,参考下一篇: ...

  4. android 8.0 耳机线控,最新资讯 | 安卓8.0这大变化没法忍!要弃耳机孔

    原标题:最新资讯 | 安卓8.0这大变化没法忍!要弃耳机孔 "玩"才是正经事儿 关注我才是硬道理 下个月,谷歌要举行I/O开发者大会,届时Android 8.0要正式跟大家见面,随 ...

  5. Overlay在PYNQ 2.0中的变化以及如何有效地使用它

    本笔记概述了Overlay类在PYNQ 2.0中的变化以及如何有效地使用它. 重新设计的Overlay类有三个主要的设计目标 1.允许覆盖用户以一致的方式找出覆盖内的内容 2.为新硬件设计的开发人员提 ...

  6. 【等保】等保2.0与等保1.0的区别变化看这里!

    等保2.0于2019年12月1日开始实施.这是我国实行网络安全等级保护制度过程中的一件大事,具有里程碑意义.但还有很多人不清楚等保2.0与等保1.0的区别变化,这里我们就来给大家详细讲解一下! 等保1 ...

  7. Python 3.0 beta 1 变化大,更简洁、更统一

    Python 3.0 beta 1 变化大,更简洁.更统一 本文最初发表于赖勇浩(恋花蝶)的博客(http://blog.csdn.net/lanphaday),如蒙转载,敬请保留全文完整,切勿去除作 ...

  8. 三星android 8.0的变化,三星S8 | S8+升级Android 8.0后有什么变化

    原标题:三星S8 | S8+升级Android 8.0后有什么变化 近期,令万千三星盖乐世 S8 | S8+用户疯狂的 Android 8.0终于开启Beta计划, 短短几个小时1.5万个内测资格就全 ...

  9. django 2.0路由配置变化

    urlpatterns变量​​的语法 urlpatterns应该是path()和/或re_path()实例的Python列表. 首先,Django会使用根路由解析模块(root URLconf)来解析 ...

最新文章

  1. Java项目:网上商城系统(java+jsp+servlert+mysql+ajax)
  2. Python学习笔记——glob模块【文件、路径操作】
  3. Oracle dataguard 正常切换和应急切换
  4. Java 静态变量和静态方法
  5. IntelliJ IDEA 15 设置默认浏览器
  6. Win32 SDK消息处理技巧
  7. 集成产品开发过程及其概念模型
  8. Spark与Pandas中DataFrame的详细对比
  9. 计算机vfp知识要点,2017年职称计算机VisualFoxPro基础知识:表的基本操作
  10. 点云高斯曲率计算(MATLAB)
  11. Android中使用字体文件
  12. ventoy集成微PE+优启通;vmware虚拟机如何进入PE系统,ventoy启动盘制作。
  13. 现代循环神经网络 - 机器翻译与数据集
  14. 第五章--设备内容(The Device Context)(2)
  15. WIN10下配置Yolov3(VS2019,GPU)+opencv训练自己的数据集(绝对详细,小白型记录)
  16. 黑马程序员匠心之作|C++教程从0到1入门编程(基础)
  17. shell - 在文本中的前一行或后一行添加一行内容,指定行前后增加一行内容
  18. mysql mpp_MPP调研
  19. python-函数(function)
  20. SLG网页游戏开发摘记

热门文章

  1. 解决 c#连接Oracle 提示system.data.oracleclient 需要 oracle 客户端软件 8.1.7 或更高版本
  2. word 转为 html5,怎么把word转化为纯文本
  3. 绿色免费的俄罗斯军用杀毒利器:Dr.Web CureIT
  4. python程序中止和恢复_用来中止进程的python脚本(Win32)
  5. day18总结和作业
  6. ROS使用IDE Eclipse
  7. 数据安全生命周期管理介绍(二)
  8. ad19怎么手动布线_pcb手动布线教程
  9. 第5章 - 二阶多智能体系统的协同控制 --> 连续时间系统一致性【程序代码】
  10. AAPT2 命令使用