天天看點

非對稱加密(3).NET 非對稱加密體系非對稱加密(3).NET 非對稱加密體系

與對稱加密算法相同,所有的非對稱算法的相關類也存在于System.Security.Cryptography命名空間中。在該命名空間中,.NET架構提供了RSA、DSA、ECC、Differ-Hellman共四種非對稱加密算法的實作。本節介紹其中幾種主要的相關類和接口。具體應用的相關内容将在下一節進行介紹。

AsymmetricAlgorithm抽象類是所有非對稱加密算法相關類的基類。該類的主要成員如下:

1)        AsymmetricAlgorithm()函數。該函數是AsymmetricAlgorithm類的構造函數。

2)        static Create()函數。建立非對稱加密算法的執行對象。

3)        static AsymmetricAlgorithm Create(string algName)函數。建立指定名稱的非對稱加密算法的執行對像。

4)        abstract void FromXmlString(string xmlString)函數。在派生類中重寫時,從XML字元串重新構造AsymmetricAlgorithm對象。

5)         int KeySizeValue字段。表示不對稱算法所用密鑰子產品的大小(機關:位)。

6)         KeySizes[] LegalKeySizesValue字段。指定不對稱算法支援的密鑰大小。不對稱算法僅支援與該數組中的條目比對的密鑰大小。

7)         abstract string KeyExchangeAlgorithm { get; }屬性。當在派生類中重寫時,擷取密鑰交換算法的名稱。

8)        virtual int KeySize { get; set; }屬性。擷取或設定不對稱算法所用密鑰子產品的大小(機關:位)。

9)         virtual KeySizes[] LegalKeySizes { get; }屬性。擷取不對稱算法支援的密鑰大小。不對稱算法僅支援與該數組中的條目比對的密鑰大小。

10)     abstract string SignatureAlgorithm { get; }屬性。擷取簽名算法的名稱。

RSA類是所有RSA算法實作類的基類,繼承自AsymmetricAlgorithm類。RSA類的主要成員如下(繼承自AsymmetricAlgorithm類的成員不再重複):

1)        abstract byte[] DecryptValue(byte[] rgb)方法。在派生類中重寫時,使用私鑰解密輸入資料。參數rgb是要解密的密碼文本。

2)        abstract RSAParameters ExportParameters(bool includePrivateParameters)方法。在派生類中重寫時,導出RSAParameters執行個體。參數includePrivateParameters為true時表示要包括私有參數,否則為false。

3)        abstract void ImportParameters(RSAParameters parameters)方法。在派生類中重寫時,導入指定的RSAParameters執行個體。

RSACryptoServiceProvider類是RSA類的預設實作,繼承了ICspAsymmetricAlgorithm接口。該類中非繼承成員如下:

1)   RSACryptoServiceProvider()構造函數。使用預設密鑰初始化 RSACryptoServiceProvider 類的新執行個體。如果沒有找到預設密鑰,則建立一個新密鑰。此構造函數建立一個Exchange密鑰對,用于加密會話密鑰以使它們可以安全存儲并與其他使用者交換。生成的密鑰對應于在非托管Microsoft Cryptographic API (CAPI) 中使用的以 AT_KEYEXCHANGE 值生成的密鑰。

2)   RSACryptoServiceProvider(int dwKeySize)構造函數。使用指定的密鑰大小初始化RSACryptoServiceProvider類的新執行個體。

3)   RSACryptoServiceProvider(CspParameters parameters)構造函數。使用指定的參數初始化RSACryptoServiceProvider類的新執行個體。此構造函數建立或重用使用parameters參數的KeyContainerName 字段指定的密鑰容器。在預設情況下,此構造函數建立一個Exchange 密鑰對,用于加密會話密鑰以使它們可以安全存儲并與其他使用者交換。生成的密鑰對應于在非托管Microsoft Cryptographic API (CAPI)中使用的以AT_KEYEXCHANGE值生成的密鑰。   你可以建立一個Signature密鑰對,用于通過将parameters參數的KeyNumber字段設定為Signature值來對消息或檔案進行身份驗證(數字簽名)。此類型的密鑰對應于 CAPI 中使用的AT_SIGNATURE值。如果使用指定的Exchange值建立一個 RSACryptoServiceProvider 對象,然後用指定的Signature值建立另一個 RSACryptoServiceProvider 對象,如果兩個對象都指定相同的密鑰容器名稱,兩個密鑰将放置在一個容器中。若要建立與使用RSACryptoServiceProvider類的強名稱簽名相容的密鑰,必須建立一個Signature密鑰對。

4)   RSACryptoServiceProvider(int dwKeySize,CspParameters parameters)構造函數。使用指定的密鑰大小和參數初始化RSACryptoServiceProvider類的新執行個體。

5)   byte[] Decrypt(byte[] rgb,bool fOAEP)方法。使用RSA算法對資料進行解密。參數rgb為要解密的資料。參數fOAEP如果為true,則使用OAEP填充(僅在運作Microsoft Windows XP或更高版本的計算機上可用)執行直接的RSA解密;否則,如果為false,則使用PKCS#1 1.5版填充。

6)   byte[] Encrypt(byte[] rgb,bool fOAEP)方法。使用RSA算法對資料進行加密。參數解釋同上。

7)   byte[] ExportCspBlob(bool includePrivateParameters)方法。導出一個表示 RSA 密鑰資訊的Blob。

8)   void ImportCspBlob(byte[] keyBlob)方法。導出一個表示RSA密鑰資訊的Blob。ImportCspBlob 方法使用相容非托管 Microsoft Cryptographic API (CAPI) 的 Blob 初始化 RSACryptoServiceProvider對象的密鑰資料。

9)   SignData(Byte[], Object)方法。使用指定的雜湊演算法計算指定位元組數組的哈希值,并對計算所得的哈希值簽名。

10)             SignData(Stream, Object)方法。使用指定的雜湊演算法計算指定輸入流的哈希值,并對計算所得的哈希值簽名。

11)             SignData(Byte[], Int32, Int32, Object)。使用指定的雜湊演算法計算指定位元組數組子集的哈希值,并對結果哈希值簽名。

12)             bool VerifyData(byte[] buffer,Object halg,byte[] signature)方法。通過将指定的簽名資料與為指定資料計算的簽名進行比較來驗證指定的簽名資料。

13)             bool VerifyHash(byte[] rgbHash,string str,byte[] rgbSignature)方法。通過将指定的簽名資料與為指定哈希值計算的簽名進行比較來驗證指定的簽名資料。

14)             PersistKeyInCsp屬性。擷取或設定一個值,該值訓示密鑰是否應該永久駐留在加密服務提供程式 (CSP) 中。使用此屬性将密鑰儲存到密鑰容器中。在CspParameters對象中指定密鑰容器名稱并用其初始化RSACryptoServiceProvider對象時,PersistKeyInCsp屬性自動設定為rue。可以使用KeyContainerName字段指定容器名稱。如果将PersistKeyInCsp屬性設定為 true 而不使用CspParameters 對象初始化 RSACryptoServiceProvider對象,将建立一個以“CLR”開頭的随機密鑰容器名稱。

15)             UseMachineKeyStore屬性。擷取或設定一個值,該值訓示密鑰是否應保持在計算機的密鑰存儲區中(而不是保持在使用者配置檔案存儲區中)。将此屬性設定為true相當于将UseMachineKeyStore标志傳遞給CspParameters 對象。UseMachineKeyStore屬性适用于目前應用程式域中的所有代碼,而CspParameters對象隻适用于顯式引用該屬性的類。當在一個沒有加載使用者配置檔案的帳戶下模拟或運作時,這些設定很有用。

DSA類和它的子類DSACryptoServiceProvider定義并實作了DSA算法,相關内容會在6.5節進行介紹。

RSAOAEPKeyExchangeDeformatter類用來對最優不對稱加密填充(OAEP)密鑰交換資料進行解密。

RSAOAEPKeyExchangeFormatter類使用RSA建立最優不對稱加密填充(OAEP)密鑰交換資料。

RSAPKCS1KeyExchangeDeformatter類,用來解密PKCS #1密鑰交換資料。

RSAPKCS1KeyExchangeFormatter類,用來使用RSA建立PKCS#1密鑰交換資料。

RSAPKCS1SignatureDeformatter類,用來驗證RSAPKCS #1 1.5版簽名。

RSAPKCS1SignatureFormatter類,用來建立RSAPKCS #1 1.5版簽名。

-----------------------注:本文部分内容改編自《.NET 安全揭秘》

本文轉自玄魂部落格園部落格,原文連結:http://www.cnblogs.com/xuanhun/archive/2012/06/23/2559554.html,如需轉載請自行聯系原作者

繼續閱讀