Função BCryptExportKey (bcrypt.h)

A função BCryptExportKey exporta uma chave para um BLOB de memória que pode ser persistido para uso posterior.

Sintaxe

NTSTATUS BCryptExportKey(
  [in]  BCRYPT_KEY_HANDLE hKey,
  [in]  BCRYPT_KEY_HANDLE hExportKey,
  [in]  LPCWSTR           pszBlobType,
  [out] PUCHAR            pbOutput,
  [in]  ULONG             cbOutput,
  [out] ULONG             *pcbResult,
  [in]  ULONG             dwFlags
);

Parâmetros

[in] hKey

O identificador da chave a ser exportada.

[in] hExportKey

O identificador da chave com a qual encapsular a chave exportada. Use esse parâmetro ao exportar BLOBs do tipo BCRYPT_AES_WRAP_KEY_BLOB; caso contrário, defina-o como NULL.

Nota O identificador hExportKey deve ser fornecido pelo mesmo provedor que forneceu o identificador hKey e hExportKey deve ser um identificador para uma chave simétrica que pode ser usada no algoritmo de encapsulamento de chave AES ( Advanced Encryption Standard ). Quando o identificador hKey é do provedor da Microsoft, hExportKey deve ser um identificador de chave AES.

 

Windows Server 2008 e Windows Vista: Esse parâmetro não é usado e deve ser definido como NULL.

[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.

Valor Significado
BCRYPT_AES_WRAP_KEY_BLOB
Exportar uma chave encapsulada de chave AES. O parâmetro hExportKey deve referenciar um ponteiro de BCRYPT_KEY_HANDLE válido para a chave de criptografia de chave e a chave representada pelo parâmetro hKey deve ter um múltiplo de 8 bytes de comprimento.

Windows Server 2008 e Windows Vista: Não há suporte para esse tipo de BLOB.

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 ou BCRYPT_DSA_KEY_BLOB_V2 imediatamente seguida pelos dados de chave. BCRYPT_DSA_KEY_BLOB é usado para comprimentos de chave de 512 a 1024 bits. BCRYPT_DSA_KEY_BLOB_V2 é usado para comprimentos de chave que excedem 1024 bits, mas são menores ou iguais a 3072 bits.

Windows 8: o suporte para BCRYPT_DSA_KEY_BLOB_V2 começa.

BCRYPT_DSA_PUBLIC_BLOB
Exportar uma chave pública DSA. O buffer pbOutput recebe uma estrutura BCRYPT_DSA_KEY_BLOB ou BCRYPT_DSA_KEY_BLOB_V2 imediatamente seguida pelos dados de chave. BCRYPT_DSA_KEY_BLOB é usado para comprimentos de chave de 512 a 1024 bits. BCRYPT_DSA_KEY_BLOB_V2 é usado para comprimentos de chave que excedem 1024 bits, mas são menores ou iguais a 3072 bits.

Windows 8: o suporte para BCRYPT_DSA_KEY_BLOB_V2 começa.

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_KEY_DATA_BLOB
Exportar uma chave simétrica para um BLOB de dados. O buffer pbOutput recebe uma estrutura BCRYPT_KEY_DATA_BLOB_HEADER imediatamente seguida pelo BLOB da chave.
BCRYPT_OPAQUE_KEY_BLOB
Exporte uma chave simétrica em um formato específico para um único provedor de serviços criptográficos (CSP). BLOBs opacos não são transferíveis e devem ser importados usando o mesmo CSP que gerou o BLOB. BLOBs opacos destinam-se apenas a serem usados para transferência entre processos de chaves e não são adequados para serem persistidos e lidos entre versões de um provedor.
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 pública 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_DSA_V2_PRIVATE_BLOB
Exporte uma chave privada DSA versão 2 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.

[out] 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 ULONG apontado pelo parâmetro pcbResult .

[in] cbOutput

Contém o tamanho, em bytes, do buffer pbOutput .

[out] pcbResult

Um ponteiro para um ULONG que recebe o número de bytes que foram copiados para o buffer pbOutput . Se o parâmetro pbOutput for NULL, essa função colocará o tamanho necessário, em bytes, no ULONG apontado por esse parâmetro.

[in] dwFlags

Um conjunto de sinalizadores que modificam o comportamento dessa função. Nenhum sinalizador é definido para essa função.

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
STATUS_SUCCESS
A função foi bem-sucedida.
STATUS_BUFFER_TOO_SMALL
O tamanho especificado pelo parâmetro cbOutput não é grande o suficiente para conter o texto cifrado.
STATUS_INVALID_HANDLE
O identificador de chave no parâmetro hKey não é válido.
STATUS_INVALID_PARAMETER
Um ou mais dos parâmetros não são válidos.
STATUS_NOT_SUPPORTED
O tipo BLOB especificado não é compatível com o provedor.

Comentários

Dependendo de quais modos de processador um provedor dá suporte, BCryptExportKey pode ser chamado do modo de usuário ou do modo kernel. Os chamadores do modo kernel podem ser executados em PASSIVE_LEVELIRQL ou DISPATCH_LEVEL IRQL. Se o nível IRQL atual for DISPATCH_LEVEL, o identificador fornecido no parâmetro hKey deverá ser derivado de um identificador de algoritmo retornado por um provedor que foi aberto com o sinalizador BCRYPT_PROV_DISPATCH e todos os ponteiros passados para a função BCryptExportKey deverão se referir à memória não paga (ou bloqueada).

Para chamar essa função no modo kernel, use Cng.lib, que faz parte do DDK (Driver Development Kit). Windows Server 2008 e Windows Vista: Para chamar essa função no modo kernel, use Ksecdd.lib.

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 bcrypt.h
Biblioteca Bcrypt.lib
DLL Bcrypt.dll

Confira também

BCryptImportKey

BCryptImportKeyPair