共用方式為


NCryptExportKey 函式 (ncrypt.h)

NCryptExportKey 函式會將 CNG 金鑰導出至記憶體 BLOB

語法

SECURITY_STATUS NCryptExportKey(
  [in]            NCRYPT_KEY_HANDLE hKey,
  [in, optional]  NCRYPT_KEY_HANDLE hExportKey,
  [in]            LPCWSTR           pszBlobType,
  [in, optional]  NCryptBufferDesc  *pParameterList,
  [out, optional] PBYTE             pbOutput,
  [in]            DWORD             cbOutput,
  [out]           DWORD             *pcbResult,
  [in]            DWORD             dwFlags
);

參數

[in] hKey

要匯出之金鑰的句柄。

[in, optional] hExportKey

目的地用戶的密碼編譯密鑰句柄。 匯出金鑰 BLOB 內的金鑰資料會使用此金鑰來加密。 這可確保只有目的地用戶能夠使用密鑰 BLOB。

[in] pszBlobType

Null 終止的 Unicode 字串,其中包含指定要匯出之 BLOB 類型的識別碼。 這可以是下列其中一個值。

BCRYPT_DH_PRIVATE_BLOB

匯出 Diffie-Hellman 公開/私鑰組pbOutput 緩衝區會立即接收BCRYPT_DH_KEY_BLOB結構,後面接著索引鍵數據。

BCRYPT_DH_PUBLIC_BLOB

匯出 Diffie-Hellman 公鑰pbOutput 緩衝區會立即接收BCRYPT_DH_KEY_BLOB結構,後面接著索引鍵數據。

BCRYPT_DSA_PRIVATE_BLOB

匯出 DSA 公開/私鑰組。 pbOutput 緩衝區會立即接收BCRYPT_DSA_KEY_BLOB結構,後面接著索引鍵數據。

BCRYPT_DSA_PUBLIC_BLOB

匯出 DSA 公鑰。 pbOutput 緩衝區會立即接收BCRYPT_DSA_KEY_BLOB結構,後面接著索引鍵數據。

BCRYPT_ECCPRIVATE_BLOB

匯出 橢圓曲線密碼編譯 (ECC) 私鑰pbOutput 緩衝區會立即接收BCRYPT_ECCKEY_BLOB結構,後面接著索引鍵數據。

BCRYPT_ECCPUBLIC_BLOB

匯出 ECC 公鑰。 pbOutput 緩衝區會立即接收BCRYPT_ECCKEY_BLOB結構,後面接著索引鍵數據。

BCRYPT_PUBLIC_KEY_BLOB

匯出任何類型的泛型公鑰。 此 BLOB 中的金鑰類型取決於BCRYPT_KEY_BLOB結構的 Magic 成員。

BCRYPT_PRIVATE_KEY_BLOB

匯出任何類型的泛型私鑰。 私鑰不一定包含公鑰。 此 BLOB 中的金鑰類型取決於BCRYPT_KEY_BLOB結構的 Magic 成員。

BCRYPT_RSAFULLPRIVATE_BLOB

匯出完整的 RSA 公開/私鑰組。 pbOutput 緩衝區會立即接收BCRYPT_RSAKEY_BLOB結構,後面接著索引鍵數據。 相較於 BCRYPT_RSAPRIVATE_BLOB 類型,此 BLOB 將包含額外的金鑰數據。

BCRYPT_RSAPRIVATE_BLOB

匯出 RSA 公開/私鑰組。 pbOutput 緩衝區會立即接收BCRYPT_RSAKEY_BLOB結構,後面接著索引鍵數據。

BCRYPT_RSAPUBLIC_BLOB

匯出 RSA 公鑰。 pbOutput 緩衝區會立即接收BCRYPT_RSAKEY_BLOB結構,後面接著索引鍵數據。

LEGACY_DH_PRIVATE_BLOB

匯出舊版 Diffie-Hellman 第 3 版私鑰 BLOB ,其中包含可使用 CryptoAPI 匯入的 Diffie-Hellman 公開/私鑰組。

LEGACY_DH_PUBLIC_BLOB

匯出舊版 Diffie-Hellman 第 3 版私鑰 BLOB ,其中包含可使用 CryptoAPI 匯入的 Diffie-Hellman 公鑰。

LEGACY_DSA_PRIVATE_BLOB

使用 CryptoAPI 匯入的表單匯出 DSA 公開/私鑰組。

LEGACY_DSA_PUBLIC_BLOB

使用 CryptoAPI 匯入的表單匯出 DSA 公鑰。

LEGACY_RSAPRIVATE_BLOB

使用 CryptoAPI 匯入的表單匯出 RSA 公開/私鑰組。

LEGACY_RSAPUBLIC_BLOB

使用 CryptoAPI 匯入的表單匯出 RSA 公鑰。

NCRYPT_CIPHER_KEY_BLOB

NCRYPT_KEY_BLOB_HEADER 結構中匯出加密金鑰。

Windows 8 和 Windows Server 2012:開始支援此值。

NCRYPT_OPAQUETRANSPORT_BLOB

以單一 CSP 特有的格式匯出金鑰,並適用於傳輸。 不透明 BLOB 無法傳輸,而且必須使用產生 BLOB 的相同 CSP 來匯入。

NCRYPT_PKCS7_ENVELOPE_BLOB

匯出 PKCS #7 信封 BLOB。 pParameterList 參數所識別的參數可以或必須包含下列參數,如必要或選擇性數據行所指出。

參數 必要或選用
NCRYPTBUFFER_CERT_BLOB 必要
NCRYPTBUFFER_PKCS_ALG_OID 必要
NCRYPTBUFFER_PKCS_ALG_PARAM 選擇性

NCRYPT_PKCS8_PRIVATE_KEY_BLOB

匯出 PKCS #8 私鑰 BLOB。 pParameterList 參數所識別的參數可以或必須包含下列參數,如必要或選擇性數據行所指出。

參數 必要或選用
NCRYPTBUFFER_PKCS_ALG_OID 選擇性
NCRYPTBUFFER_PKCS_ALG_PARAM 選擇性
NCRYPTBUFFER_PKCS_SECRET 選擇性

NCRYPT_PROTECTED_KEY_BLOB

NCRYPT_KEY_BLOB_HEADER 結構中匯出受保護的金鑰。

Windows 8 和 Windows Server 2012:開始支援此值。

[in, optional] pParameterList

接收金鑰參數資訊的 NCryptBufferDesc 結構位址。 如果不需要這項資訊,此參數可以是 NULL

[out, optional] pbOutput

接收金鑰 BLOB 的緩衝區位址。 cbOutput 參數包含這個緩衝區的大小。 如果此參數為 NULL,此函式會將所需的大小以位元組為單位,放在由其所指向的DWORD 參數中。

[in] cbOutput

pbOutput 緩衝區的大小,以位元組為單位。

[out] pcbResult

接收複製到 pbOutput 緩衝區的位元組數目的 DWORD 變數位址。 如果 pbOutput 參數為 NULL,此函式會將必要的大小以位元組為單位,放在此參數所指向的 DWORD 中。

[in] dwFlags

修改函式行為的旗標。 這可以是零或下列一或多個值的組合。 有效的旗標集是每個金鑰儲存提供者特有的。 下列旗標適用於所有提供者。

意義
NCRYPT_SILENT_FLAG 要求金鑰服務提供者 (KSP) 不會顯示任何使用者介面。 如果提供者必須顯示要運作的UI,呼叫會失敗,而 KSP 應該將NTE_SILENT_CONTEXT錯誤碼設定為最後 一個 錯誤。

傳回值

傳回狀態代碼,指出函式的成功或失敗。

可能的傳回碼包括但不限於下列各項。

傳回碼 Description
ERROR_SUCCESS 函式成功。
NTE_BAD_FLAGS dwFlags 參數包含無效的值。
NTE_BAD_KEY_STATE hKey 參數指定的金鑰無效。 此錯誤最常見的原因是使用 NCryptFinalizeKey 函式未完成密鑰。
NTE_BAD_TYPE hKey 參數指定的密鑰無法匯出至 pszBlobType 參數所指定的 BLOB 類型。
NTE_INVALID_HANDLE hKeyhExportKey 參數無效。
NTE_INVALID_PARAMETER 一或多個參數無效。

備註

服務不得從它的 StartService 函式呼叫此函式。 如果服務從它的 StartService 函式呼叫此函式,可能會發生死結,而且服務可能會停止回應。

規格需求

需求
最低支援的用戶端 Windows Vista [傳統型應用程式 |UWP 應用程式]
最低支援的伺服器 Windows Server 2008 [傳統型應用程式 |UWP 應用程式]
目標平台 Windows
標頭 ncrypt.h
程式庫 Ncrypt.lib
Dll Ncrypt.dll

另請參閱