2011-01-13 51 views
3

我已阅读了一些关于此主题的内容,但对于我所看到的答案,我仍然不满意。是否安全使用Rijndael.Create()而不是新的RijndaelManaged()

当您使用Rijndael.Create()加密算法,你RijndaelManaged类型的对象 - 似乎没有成为这个和调用new RijndaelManaged()之间的差异(或New RijndaelManaged()你VB人)。 :)

从我读到的,Rijndael.Create()方法存在,所以你不必担心具体的实现,以防它在未来的版本中发生变化。但是我的问题是:假设发生了,.NET 5.0返回一个不同的实现。有没有保证使用RijndaelManaged加密的项目可以使用SomeFutureRijndaelManaged解决没有问题?

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

由于

+0

关于VB的注意事项:VB是不区分大小写的,所以C#构造函数的调用将在VB中工作。只是IDE坚持把所有东西都利用起来。 –

+1

是的,我知道......只是一个不好的笑话。 –

回答

7

Rijndael.Create增加了抽象和附加重定向的层,使得假想它可以提供算法的一个系统特定版本。在实践中,它非常缓慢,需要通过Crypto API解析OID字符串映射才能最终到达RijndaelManaged类。我们发现,不是跨平台提供稳定性,而是在Windows 2000/XP/Vista/Windows中引发问题。另外,通过Create方法创建对象的实例比直接实例化RijndaelManaged类要慢几百倍。我们发现这是加密/解密内存数据时的主要瓶颈。至于“未来证明” - 安全算法没有这种东西。 .NET 5.0出来时。无论您创建算法的方法如何,您都必须进行更新以适应所做的任何更改。您可以在应用程序的.config文件中使用<supportedRuntime />来锁定.NET版本,以便在测试和更新后只允许切换应用程序。

+0

谢谢。我想我会直接坚持使用RijndaelManaged,并且会考虑受支持的运行时间设置。 –