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

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

从我读到的内容来看,存在 Rijndael.Create() 方法,因此您无需担心具体实现,以防它在 future 版本中发生变化。但我的问题是:假设确实发生了,并且 .NET 5.0 返回了不同的实现。是否可以保证使用 RijndaelManaged 加密的项目可以使用 SomeFutureRijndaelManaged 解密而不会出现问题?

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

谢谢

最佳答案

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

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

关于.net - 使用 Rijndael.Create() 而不是 new RijndaelManaged() 是否安全,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4675505/

10-11 02:15