Compartilhar via


Função NCryptExportKey (ncrypt.h)

A função NCryptExportKey exporta uma chave CNG para um BLOB de memória.

Sintaxe

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
);

Parâmetros

[in] hKey

Um identificador da chave a ser exportada.

[in, optional] hExportKey

Um identificador para uma chave criptográfica do usuário de destino. Os dados de chave dentro do BLOB de chave exportada são criptografados usando essa chave. Isso garante que somente o usuário de destino seja capaz de usar o BLOB de chave.

[in] pszBlobType

Uma cadeia de caracteres Unicode terminada em nulo que contém um identificador que especifica o tipo de BLOB a ser exportado. Esse pode ser um dos valores a seguir.

BCRYPT_DH_PRIVATE_BLOB

Exportar um par de chaves pública/privada Diffie-Hellman. O buffer pbOutput recebe uma estrutura de BCRYPT_DH_KEY_BLOB imediatamente seguida pelos dados de chave.

BCRYPT_DH_PUBLIC_BLOB

Exportar uma chave pública Diffie-Hellman. O buffer pbOutput recebe uma estrutura de BCRYPT_DH_KEY_BLOB imediatamente seguida pelos dados de chave.

BCRYPT_DSA_PRIVATE_BLOB

Exportar um par de chaves públicas/privadas da DSA. O buffer pbOutput recebe uma estrutura de BCRYPT_DSA_KEY_BLOB imediatamente seguida pelos dados de chave.

BCRYPT_DSA_PUBLIC_BLOB

Exportar uma chave pública DSA. O buffer pbOutput recebe uma estrutura de BCRYPT_DSA_KEY_BLOB imediatamente seguida pelos dados de chave.

BCRYPT_ECCPRIVATE_BLOB

Exportar uma chave privada ECC (criptografia de curva elíptica). O buffer pbOutput recebe uma estrutura de BCRYPT_ECCKEY_BLOB imediatamente seguida pelos dados de chave.

BCRYPT_ECCPUBLIC_BLOB

Exportar uma chave pública ECC. O buffer pbOutput recebe uma estrutura de BCRYPT_ECCKEY_BLOB imediatamente seguida pelos dados de chave.

BCRYPT_MLKEM_PRIVATE_SEED_BLOB

Exportar uma chave de semente privada ML-KEM. O buffer pbOutput recebe uma estrutura de BCRYPT_MLKEM_KEY_BLOB imediatamente seguida pelo conjunto de parâmetros e dados de chave.

Observação: ML-KEM identificadores de chave que contêm uma chave privada importada usando BCRYPT_MLKEM_PRIVATE_BLOB não têm informações suficientes para exportar uma chave de semente privada.

Windows Insiders (build 27843): O suporte para ML-KEM começa.

BCRYPT_MLKEM_PRIVATE_BLOB

Exportar uma chave ML-KEM privada (decapsulação). O buffer pbOutput recebe uma estrutura de BCRYPT_MLKEM_KEY_BLOB imediatamente seguida pelo conjunto de parâmetros e dados de chave.

Windows Insiders (build 27843): O suporte para ML-KEM começa.

BCRYPT_MLKEM_PUBLIC_BLOB

Exportar uma chave ML-KEM pública (encapsulamento). O buffer pbOutput recebe uma estrutura de BCRYPT_MLKEM_KEY_BLOB imediatamente seguida pelo conjunto de parâmetros e dados de chave.

Windows Insiders (build 27843): O suporte para ML-KEM começa.

BCRYPT_PQDSA_PRIVATE_SEED_BLOB

Exportar uma chave de semente privada PQDSA. O buffer pbOutput recebe uma estrutura de BCRYPT_PQDSA_KEY_BLOB imediatamente seguida pelo conjunto de parâmetros e dados de chave.

Nota: Identificadores de chave PQDSA que contêm uma chave privada que foi importada usando BCRYPT_PQDSA_PRIVATE_BLOB não têm informações suficientes para exportar uma chave de semente privada.

Windows Insiders (build 27843): O suporte para ML-DSA começa.

BCRYPT_PQDSA_PRIVATE_BLOB

Exportar uma chave privada PQDSA. O buffer pbOutput recebe uma estrutura de BCRYPT_PQDSA_KEY_BLOB imediatamente seguida pelo conjunto de parâmetros e dados de chave.

Windows Insiders (build 27843): O suporte para ML-DSA começa.

BCRYPT_PQDSA_PUBLIC_BLOB

Exportar uma chave pública PQDSA. O buffer pbOutput recebe uma estrutura de BCRYPT_PQDSA_KEY_BLOB imediatamente seguida pelo conjunto de parâmetros e dados de chave.

Windows Insiders (build 27843): O suporte para ML-DSA começa.

BCRYPT_PUBLIC_KEY_BLOB

Exportar uma chave pública genérica de qualquer tipo. O tipo de chave neste BLOB é determinado pelo membro Magic da estrutura BCRYPT_KEY_BLOB .

BCRYPT_PRIVATE_KEY_BLOB

Exportar uma chave privada genérica de qualquer tipo. A chave privada não contém necessariamente a chave pública. O tipo de chave neste BLOB é determinado pelo membro Magic da estrutura BCRYPT_KEY_BLOB .

BCRYPT_RSAFULLPRIVATE_BLOB

Exportar um par de chaves pública/privada RSA completa. O buffer pbOutput recebe uma estrutura de BCRYPT_RSAKEY_BLOB imediatamente seguida pelos dados de chave. Esse BLOB incluirá material de chave adicional em comparação com o tipo BCRYPT_RSAPRIVATE_BLOB .

BCRYPT_RSAPRIVATE_BLOB

Exportar um par de chaves pública/privada RSA. O buffer pbOutput recebe uma estrutura de BCRYPT_RSAKEY_BLOB imediatamente seguida pelos dados de chave.

BCRYPT_RSAPUBLIC_BLOB

Exportar uma chave pública RSA. O buffer pbOutput recebe uma estrutura de BCRYPT_RSAKEY_BLOB imediatamente seguida pelos dados de chave.

LEGACY_DH_PRIVATE_BLOB

Exporte um blob de chave privadaDiffie-Hellman versão 3 herdado que contenha um par de chaves pública/privada Diffie-Hellman que pode ser importado usando CryptoAPI.

LEGACY_DH_PUBLIC_BLOB

Exporte um BLOB de chave privadaDiffie-Hellman versão 3 herdado que contenha uma chave pública Diffie-Hellman que pode ser importada usando CryptoAPI.

LEGACY_DSA_PRIVATE_BLOB

Exporte um par de chaves públicas/privadas DSA em um formulário que pode ser importado usando CryptoAPI.

LEGACY_DSA_PUBLIC_BLOB

Exporte uma chave pública DSA em um formulário que pode ser importado usando CryptoAPI.

LEGACY_RSAPRIVATE_BLOB

Exporte um par de chaves pública/privada RSA em um formulário que pode ser importado usando CryptoAPI.

LEGACY_RSAPUBLIC_BLOB

Exporte uma chave pública RSA em um formulário que pode ser importado usando CryptoAPI.

NCRYPT_CIPHER_KEY_BLOB

Exportar uma chave de criptografia em uma estrutura NCRYPT_KEY_BLOB_HEADER .

Windows 8 e Windows Server 2012: O suporte para esse valor começa.

NCRYPT_OPAQUETRANSPORT_BLOB

Exporte uma chave em um formato específico para um único CSP e seja adequado para transporte. BLOBs opacos não são transferíveis e devem ser importados usando o mesmo CSP que gerou o BLOB.

NCRYPT_PKCS7_ENVELOPE_BLOB

Exportar um BLOB de envelope PKCS nº 7. Os parâmetros identificados pelo parâmetro pParameterList podem ou devem conter os parâmetros a seguir, conforme indicado pela coluna Obrigatória ou opcional.

Parâmetro Obrigatório ou opcional
NCRYPTBUFFER_CERT_BLOB Obrigatório
NCRYPTBUFFER_PKCS_ALG_OID Obrigatório
NCRYPTBUFFER_PKCS_ALG_PARAM Opcional

NCRYPT_PKCS8_PRIVATE_KEY_BLOB

Exportar um BLOB de chave privada PKCS nº 8. Os parâmetros identificados pelo parâmetro pParameterList podem ou devem conter os parâmetros a seguir, conforme indicado pela coluna Obrigatória ou opcional.

Parâmetro Obrigatório ou opcional
NCRYPTBUFFER_PKCS_ALG_OID Opcional
NCRYPTBUFFER_PKCS_ALG_PARAM Opcional
NCRYPTBUFFER_PKCS_SECRET Opcional

NCRYPT_PROTECTED_KEY_BLOB

Exportar uma chave protegida em uma estrutura de NCRYPT_KEY_BLOB_HEADER .

Windows 8 e Windows Server 2012: O suporte para esse valor começa.

NCRYPT_PQ_PRIVATE_KEY_BLOB

Exportar uma chave privada genérica de qualquer tipo de algoritmo Post-Quantum. O tipo de chave neste BLOB é determinado pelo membro Magic da estrutura NCRYPT_PQ_BLOB .

[in, optional] pParameterList

O endereço de uma estrutura NCryptBufferDesc que recebe informações de parâmetro para a chave. Esse parâmetro poderá ser NULL se essas informações não forem necessárias.

[out, optional] pbOutput

O endereço de um buffer que recebe o BLOB de chave. O parâmetro cbOutput contém o tamanho desse buffer. Se esse parâmetro for NULL, essa função colocará o tamanho necessário, em bytes, no DWORD apontado pelo parâmetro pcbResult .

[in] cbOutput

O tamanho, em bytes, do buffer pbOutput .

[out] pcbResult

O endereço de uma variável DWORD que recebe o número de bytes copiados para o buffer pbOutput . Se o parâmetro pbOutput for NULL, essa função colocará o tamanho necessário, em bytes, no DWORD apontado por esse parâmetro.

[in] dwFlags

Sinalizadores que modificam o comportamento da função. Isso pode ser zero ou uma combinação de um ou mais dos valores a seguir. O conjunto de sinalizadores válidos é específico para cada provedor de armazenamento de chaves. O sinalizador a seguir se aplica a todos os provedores.

Valor Significado
NCRYPT_SILENT_FLAG Solicita que o KSP (provedor de armazenamento de chaves) não exiba nenhuma interface do usuário. Se o provedor precisar exibir a interface do usuário para operar, a chamada falhará e o KSP deverá definir o código de erro NTE_SILENT_CONTEXT como o último erro.

Valor de retorno

Retorna um código de status que indica o êxito ou a falha da função.

Os códigos de retorno possíveis incluem, mas não se limitam a, o seguinte.

Código de retorno Descrição
ERROR_SUCCESS A função foi bem-sucedida.
NTE_BAD_FLAGS O parâmetro dwFlags contém um valor que não é válido.
NTE_BAD_KEY_STATE A chave especificada pelo parâmetro hKey não é válida. A causa mais comum desse erro é que a chave não foi concluída usando a função NCryptFinalizeKey .
NTE_BAD_TYPE A chave especificada pelo parâmetro hKey não pode ser exportada para o tipo BLOB especificado pelo parâmetro pszBlobType .
NTE_INVALID_HANDLE O parâmetro hKey ou hExportKey não é válido.
NTE_INVALID_PARAMETER Um ou mais parâmetros não são válidos.

Observações

Um serviço não deve chamar essa função de sua Função StartService. Se um serviço chamar essa função de sua função StartService , um deadlock poderá ocorrer e o serviço poderá parar de responder.

Requisitos

Requisito Valor
Cliente mínimo suportado Windows Vista [aplicativos da área de trabalho | Aplicativos UWP]
Servidor mínimo compatível Windows Server 2008 [aplicativos da área de trabalho | Aplicativos UWP]
da Plataforma de Destino Windows
cabeçalho ncrypt.h
Biblioteca Ncrypt.lib
de DLL Ncrypt.dll

Consulte também