3

我已经阅读了一些关于这个主题的内容,但我仍然对我看到的答案不是 100% 满意。

当您使用创建加密算法Rijndael.Create()时,您会得到一个类型的对象- 这与调用(或者对于您的 VB 人)RijndaelManaged之间似乎没有区别。:)new RijndaelManaged()New RijndaelManaged()

根据我的阅读,该Rijndael.Create()方法存在,因此您无需担心具体的实现,以防它在未来的版本中发生变化。但我的问题是:假设确实发生了,.NET 5.0 返回一个不同的实现。是否可以保证使用 RijndaelManaged 加密的项目可以毫无问题地使用 解密SomeFutureRijndaelManaged

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

谢谢

4

1 回答 1

8

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

至于“面向未来” - 安全算法没有这样的事情。当 .NET 5.0 出来时。无论您创建算法的方法如何,您都必须更新以适应他们所做的任何更改。您可以<supportedRuntime />在应用程序的 .config 文件中使用以锁定 .NET 版本,以便您只允许您的应用程序在测试和更新后切换。

于 2011-01-13T00:24:31.243 回答