2011-01-13 91 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,並且會考慮受支持的運行時間設置。 –

相關問題