[英]When should I use CryptoAPI vs System.Security.Cryptography vs Bouncycastle?
[英]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.