我已经阅读了一些关于这个主题的内容,但我仍然不能完全理解我看到的答案。
使用Rijndael.Create()
创建加密算法时,会得到RijndaelManaged
类型的对象 - 这与new RijndaelManaged()
(或{{}之间似乎没有区别1}}为你VB人员)。 :)
根据我的阅读,New RijndaelManaged()
方法存在,因此您不需要担心具体的实现,以防它在将来的版本中发生变化。但我的问题是:假设确实发生了这种情况,.NET 5.0会返回不同的实现。是否可以保证使用RijndaelManaged加密的项目可以使用Rijndael.Create()
解密而不会出现问题?
我无法想象他们会不相容,但我只想确认一下。
由于
答案 0 :(得分:7)
Rijndael.Create
添加了一层抽象和其他重定向,因此据称它可以提供算法的系统特定版本。实际上它非常慢,需要通过Crypto API来解析OID字符串映射,最终到达RijndaelManaged
类。我们发现,不是跨平台提供稳定性,而是在Windows 2000 / XP / Vista / Windows上引发问题。而且,通过Create方法创建对象实例要比直接实例化RijndaelManaged类慢几百倍。在加密/解密内存中的数据时,我们发现这是一个主要瓶颈。
就“未来验证”而言 - 安全算法没有这样的东西。当.NET 5.0问世时。无论您创建算法的方法如何,您都必须进行更新以适应他们所做的任何更改。您可以在应用程序的.config文件中使用<supportedRuntime />
来锁定.NET版本,这样您只有在测试和更新后才允许应用程序切换。