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 | hKey 或 hExportKey 參數無效。 |
NTE_INVALID_PARAMETER | 一或多個參數無效。 |
備註
服務不得從它的 StartService 函式呼叫此函式。 如果服務從它的 StartService 函式呼叫此函式,可能會發生死結,而且服務可能會停止回應。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows Vista [傳統型應用程式 |UWP 應用程式] |
最低支援的伺服器 | Windows Server 2008 [傳統型應用程式 |UWP 應用程式] |
目標平台 | Windows |
標頭 | ncrypt.h |
程式庫 | Ncrypt.lib |
Dll | Ncrypt.dll |