產生加密和解密的金鑰

建立和管理金鑰是密碼編譯程序中很重要的一部分。 對稱演算法需要建立金鑰和初始化向量 (IV)。 您必須將此金鑰秘密保留給不應該解密資料的任何人。 IV 不一定是秘密,但應該針對每個會話變更。 非對稱演算法需要建立公開金鑰和私密金鑰。 公開金鑰可以讓任何人知道,但解密者必須只知道對應的私密金鑰。 本節描述如何產生及管理對稱和非對稱演算法的金鑰。

對稱金鑰

.NET 提供的對稱加密類別需要金鑰和新的 IV,才能加密和解密資料。 當您使用無 Create() 參數方法建立其中一個 Managed 對稱密碼編譯類別的新實例時,會自動建立新的金鑰和 IV。 您允許解密資料的任何人都必須擁有相同的金鑰和 IV,並使用相同的演算法。 一般而言,應該為每個會話建立新的金鑰和 IV,而且金鑰和 IV 都不應該儲存在稍後的會話中使用。

若要將對稱金鑰和 IV 傳達給遠端合作物件,您通常會使用非對稱式加密來加密對稱金鑰。 在沒有加密的情況下,透過不安全的網路傳送金鑰並不安全,因為任何攔截金鑰和 IV 的人都可以解密您的資料。

下列範例示範如何為 Aes 演算法建立預設實作類別的新實例:

Dim aes As Aes = Aes.Create()  
Aes aes = Aes.Create();  

上述程式碼的執行會產生新的索引鍵和 IV,並分別將它們設定為 KeyIV 屬性的值。

有時候您可能需要產生多個金鑰。 在此情況下,您可以建立實作對稱演算法之類別的新實例。 然後,藉由呼叫 GenerateKey 和 方法來建立新的金鑰和 GenerateIV IV。 下列程式碼範例說明如何在建立對稱密碼編譯類別的新實例之後,建立新的金鑰和 IV:

Dim aes As Aes = Aes.Create()  
aes.GenerateIV()  
aes.GenerateKey()  
Aes aes = Aes.Create();  
aes.GenerateIV();  
aes.GenerateKey();  

上述程式碼的執行會建立 的新實例 Aes ,並產生金鑰和 IV。 呼叫 和 方法時 GenerateKey ,會建立另一個索引鍵和 GenerateIV IV。

非對稱金鑰

.NET 提供 RSA 非對稱式加密的 類別。 當您使用無 Create() 參數方法建立新的實例時,類別會 RSA 建立公開/私密金鑰組。 非對稱金鑰可以儲存以用於多個工作階段,或只針對一個工作階段而產生。 雖然您可以讓公開金鑰可供使用,但您必須密切保護私密金鑰。

當您建立非對稱演算法類別的新實例時,會產生公開/私密金鑰組。 建立 類別的新實例之後,您可以使用 方法來擷取金鑰資訊 ExportParameters 。 這個方法會傳 RSAParameters 回保存索引鍵資訊的 結構。 方法也接受布林值,指出是否只傳回公開金鑰資訊,或同時傳回公開金鑰和私密金鑰資訊。

您也可以使用其他方法來擷取金鑰資訊,例如:

您可以使用 ImportParameters 方法,將 實例初始化 RSA 為 結構的值 RSAParameters 。 或者, RSA.Create(RSAParameters) 您可以使用 方法來建立新的實例。

絕對不要在本機電腦上逐字儲存非對稱私密金鑰或純文字。 如果您需要儲存私密金鑰,則必須使用金鑰容器。 如需如何在金鑰容器中儲存私密金鑰的詳細資訊,請參閱 如何:將非對稱金鑰儲存在金鑰容器中

下列程式碼範例會建立 類別的新實例 RSA 、建立公開/私密金鑰組,並將公開金鑰資訊儲存至 RSAParameters 結構:

'Generate a public/private key pair.  
Dim rsa as RSA = RSA.Create()  
'Save the public key information to an RSAParameters structure.  
Dim rsaKeyInfo As RSAParameters = rsa.ExportParameters(false)  
//Generate a public/private key pair.  
RSA rsa = RSA.Create();  
//Save the public key information to an RSAParameters structure.  
RSAParameters rsaKeyInfo = rsa.ExportParameters(false);  

另請參閱