共用方式為


加密數據

下列程式描述使用基底密碼編譯函式加密訊息所採取的步驟。 若要使用 PKCS #7 標準加密訊息,請參閱 低階訊息函式簡化的訊息函式

要加密訊息

  1. 使用 cryptGenKey函式產生會話密鑰。

    進行此呼叫會產生隨機密鑰,並傳回句柄,讓密鑰可用來加密和解密數據。 此時也會指定要使用的加密演算法。 因為 CryptoAPI 不允許應用程式使用公鑰演演算法來加密大量數據,因此請使用 cryptGenKey呼叫來指定對稱演算法,例如 RC2 或 RC4。

  2. 或者,使用 CryptDeriveKey 函式,將密碼轉換成適合加密的密鑰。

    如果應用程式需要加密訊息,讓具有指定密碼的任何人都可以解密數據,請使用 CryptDeriveKey,將密碼轉換成適合加密的密鑰。

    注意

    在此情況下,會呼叫此函式,取代 CryptGenKey 函式,因此不需要後續 CryptExportKey 的呼叫。

     

  3. 如有必要,請使用 CryptSetKeyParam 函式來設定密鑰的額外密碼編譯屬性

    產生密鑰之後,可以使用 cryptSetKeyParam函式設定密鑰的額外密碼編譯屬性。 此函式可讓檔案的不同區段以不同的密鑰 Salt 加密,並提供變更金鑰的加密模式或初始化向量的方式。 這些參數可用來讓加密符合特定的數據加密標準。

  4. 使用 CryptEncrypt 函式加密檔案中的數據。

    CryptEncrypt 函式會採用上一個步驟中產生的會話密鑰,並加密數據的緩衝區。

    注意

    當數據加密時,加密演算法可能會稍微擴充數據。 應用程式負責記住加密數據的長度,以便稍後為 cryptDecrypt 函式指定適當的長度。

     

  5. 或者,使用 CryptExportKey 函式,讓目前使用者在未來解密數據。

    為了允許目前使用者在未來解密數據,CryptExportKey 函式會用來將解密金鑰儲存成加密形式(金鑰 BLOB),而該密鑰只能以使用者的私鑰解密。 要達成此目的,此函式需要使用者的金鑰交換公鑰,並可使用 CryptGetUserKey 函式來取得。 CryptExportKey 函式會傳回密鑰 BLOB,應用程式必須儲存金鑰 BLOB 才能用於解密檔案

注意

如果應用程式有其他用戶的憑證(或公鑰),它可以透過對每位應獲存取權的使用者執行 CryptExportKey 呼叫,來允許其他使用者解密檔案。 傳回的金鑰 BLOB 必須由應用程式儲存,如步驟 5 所示。

 

建立加密訊息

簡化的訊息函式可讓您更輕鬆地加密和解密數據。 下圖描述必須完成以加密訊息的個別工作。 下列步驟說明於下列清單中。

加密訊息

要加密訊息

  1. 取得純文本訊息的指標。
  2. 產生對稱會話金鑰。
  3. 使用對稱金鑰和指定的加密演算法,加密訊息數據。
  4. 開啟證書存儲。
  5. 取得收件者的憑證。
  6. 從收件者的憑證取得公鑰。
  7. 使用收件者的公鑰,加密對稱金鑰。
  8. 從收件者的憑證取得收件者的標識符。
  9. 在數位信封訊息中包含下列內容:數據加密演算法、加密的數據、加密的對稱密鑰,以及收件者識別碼。