.net 使用Rijndael.Create()而不是新的RijndaelManaged()安全吗

.net 使用Rijndael.Create()而不是新的RijndaelManaged()安全吗,.net,cryptography,rijndaelmanaged,rijndael,.net,Cryptography,Rijndaelmanaged,Rijndael,我已经读了一些关于这个话题的文章,但是我仍然对我所看到的答案不是100%满意 当您使用Rijndael.create()创建加密算法时,您会得到一个类型为RijndaelManaged的对象-这与调用new RijndaelManaged()(或者为VB用户调用new RijndaelManaged())似乎没有什么区别 从我所读到的内容来看,存在Rijndael.Create()方法,这样您就不必担心具体的实现,以防它在将来的版本中发生更改。但我的问题是:假设确实发生了这种情况,.NET5.0

我已经读了一些关于这个话题的文章,但是我仍然对我所看到的答案不是100%满意

当您使用
Rijndael.create()
创建加密算法时,您会得到一个类型为
RijndaelManaged
的对象-这与调用
new RijndaelManaged()
(或者为VB用户调用
new RijndaelManaged()
)似乎没有什么区别

从我所读到的内容来看,存在
Rijndael.Create()
方法,这样您就不必担心具体的实现,以防它在将来的版本中发生更改。但我的问题是:假设确实发生了这种情况,.NET5.0返回一个不同的实现。是否可以保证使用RijndaelManaged加密的项目可以使用
SomeFutureRijndaelManaged
解密而不会出现问题

我无法想象它们会不兼容,但我只想确认一下


感谢Rijndael。Create添加了一层抽象和额外的重定向,因此可以提供特定于系统的算法版本。实际上它非常慢,需要通过Crypto API来解析OID字符串映射,最终到达
RijndaelManaged
类。我们发现,它没有提供跨平台的稳定性,反而会在Windows 2000/XP/Vista/Windows中引发问题。另外,通过create方法创建对象实例比直接实例化RijndaelManaged类慢几百倍。我们发现这是在内存中加密/解密数据时的一个主要瓶颈


至于“未来证明”——安全算法没有这种东西。当.NET5.0问世时。无论您创建算法的方法如何,您都必须进行更新以适应他们所做的任何更改。您可以在应用程序的.config文件中使用
锁定.NET版本,这样您只允许在测试和更新后切换应用程序。

关于VB注意:VB不区分大小写,因此C#构造函数调用将像在VB中一样工作。只是IDE坚持把所有东西都资本化。是的,我知道…只是个坏笑话。谢谢。我想我会坚持直接管理RijndaelManaged,我会研究supportedRuntime设置。