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 da chave exportada BLOB são criptografados usando essa chave. Isso garante que somente o usuário de destino seja capaz de fazer uso da chave BLOB.

[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

Exporte um par de chaves pública/privada Diffie-Hellman. O buffer pbOutput recebe uma estrutura 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 BCRYPT_DH_KEY_BLOB imediatamente seguida pelos dados de chave.

BCRYPT_DSA_PRIVATE_BLOB

Exportar um par de chaves públicas/privadas DSA. O buffer pbOutput recebe uma estrutura 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 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 BCRYPT_ECCKEY_BLOB imediatamente seguida pelos dados de chave.

BCRYPT_ECCPUBLIC_BLOB

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

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

Exporte 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

Exporte um par completo de chaves públicas/privadas RSA. 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 de BCRYPT_RSAPRIVATE_BLOB .

BCRYPT_RSAPRIVATE_BLOB

Exportar um par de chaves públicas/privadas 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 privada Diffie-Hellman versão 3 herdado que contém um par de chaves pública/privada Diffie-Hellman que pode ser importado usando CryptoAPI.

LEGACY_DH_PUBLIC_BLOB

Exporte um BLOB de chave privada Diffie-Hellman versão 3 herdado que contém 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úblicas/privadas 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

Exporte 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 adequada 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ório 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ório 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 NCRYPT_KEY_BLOB_HEADER .

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

[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 a chave BLOB. 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 serviços de chave) 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.

Retornar valor

Retorna um código 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 dos parâmetros não são válidos.

Comentários

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 com suporte Windows Vista [aplicativos da área de trabalho | Aplicativos UWP]
Servidor mínimo com suporte Windows Server 2008 [aplicativos da área de trabalho | Aplicativos UWP]
Plataforma de Destino Windows
Cabeçalho ncrypt.h
Biblioteca Ncrypt.lib
DLL Ncrypt.dll

Confira também