簡體   English   中英

我應該使用System.Security.Cryptography命名空間中的哪個AES類?

[英]Which of the AES classes in the System.Security.Cryptography namespace should I use?

System.Security.Cryptography命名空間至少具有3種看似可互換的方式來獲取將執行AES加密/解密的對象:

using (var aes = Aes.Create())

要么

using (var aes = new AesCryptoServiceProvider())

要么

using (var aes = new AesCng())

前兩個是在.NET Framework 3.5版中引入的。 第三是新的。 它是在4.6.2版中引入的。 因此,一個人可能會懷疑它比其他2個更好。但是文檔中沒有任何地方建議使用它代替其他2個。

前兩個都有一個代碼示例。 這兩個樣品看起來基本相同。

我應該使用哪一個?為什么?

Aes是一個抽象類。 我假設Aes.Create返回系統默認值。 這可能是您要使用的。 讓系統決定哪些可用,哪些最佳使用。

其他是實現類。

  • AesCryptoServiceProvider使用舊的加密API MS CAPI;
  • AesCng使用Windows Vista中引入的新一代加密API。
  • AesManaged在.NET中實現AES(您的帖子中未提及)。

您也可以使用Aes.Create(string)選擇一種實現。 如果可能,我將嘗試避免直接使用實現類。

僅當您知道明確需要使用特定類或確實沒有抽象Aes類時,才使用實現類。


請注意,由Microsoft公開類型系統中的加密實現有很多缺點。 選擇一個特定的提供程序可能會比較困難,基於密鑰的實現選擇可能會更困難(硬件加密),最終可能會誘使用戶編寫不兼容或效率低下的代碼。

Java中的CipherSpi實現類例如從視圖中隱藏; 這些是從通用Cipher類調用的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM