Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
A função BCryptExportKey exporta uma chave para um BLOB de memória que pode ser persistente 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.
Observação
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 | 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 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 3.072 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 de 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 3.072 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 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_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 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_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. Os BLOBs opacos destinam-se apenas a serem usados para a transferência interprocessa de chaves e não são adequados para serem persistidos e lidos entre versões de um provedor. |
| BCRYPT_PQDSA_PRIVATE_SEED_BLOB | Exportar uma chave de semente privada PQDSA (algoritmo de Assinatura Digital) Pós-Quantum. 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_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_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_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 públicaDiffie-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_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ú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. |
[out] 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 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.
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 |
|---|---|
| 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 manter o texto criptografado. Se o buffer pbOutput for muito pequeno, pcbResult receberá o número de bytes necessários para pbOutput. |
| STATUS_INVALID_HANDLE | O identificador de chave no parâmetro hKey não é válido. |
| STATUS_INVALID_PARAMETER | Um ou mais parâmetros não são válidos. |
| STATUS_NOT_SUPPORTED | Não há suporte para o tipo BLOB especificado pelo provedor. Se o identificador de chave fornecido não der suporte à exportação da semente privada. Confira as observações. |
Observações
Ao usar um provedor de algoritmo com 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 aberto com o sinalizador BCRYPT_PROV_DISPATCH e quaisquer 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 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 | bcrypt.h |
| Biblioteca | Bcrypt.lib |
| de DLL | Bcrypt.dll |