Função BCryptDecrypt (bcrypt.h)

A função BCryptDecrypt descriptografa um bloco de dados.

Sintaxe

NTSTATUS BCryptDecrypt(
  [in, out]           BCRYPT_KEY_HANDLE hKey,
  [in]                PUCHAR            pbInput,
  [in]                ULONG             cbInput,
  [in, optional]      VOID              *pPaddingInfo,
  [in, out, optional] PUCHAR            pbIV,
  [in]                ULONG             cbIV,
  [out, optional]     PUCHAR            pbOutput,
  [in]                ULONG             cbOutput,
  [out]               ULONG             *pcbResult,
  [in]                ULONG             dwFlags
);

Parâmetros

[in, out] hKey

O identificador da chave a ser usada para descriptografar os dados. Esse identificador é obtido de uma das principais funções de criação, como BCryptGenerateSymmetricKey, BCryptGenerateKeyPair ou BCryptImportKey.

[in] pbInput

O endereço de um buffer que contém o texto cifrado a ser descriptografado. O parâmetro cbInput contém o tamanho do texto cifrado a ser descriptografado. Para obter mais informações, consulte Comentários.

[in] cbInput

O número de bytes no buffer pbInput a ser descriptografado.

[in, optional] pPaddingInfo

Um ponteiro para uma estrutura que contém informações de preenchimento. Esse parâmetro só é usado com chaves assimétricas e modos de criptografia autenticados. Se um modo de criptografia autenticado for usado, esse parâmetro deverá apontar para uma estrutura BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO . Se chaves assimétricas forem usadas, o tipo de estrutura para a qual esse parâmetro aponta será determinado pelo valor do parâmetro dwFlags . Caso contrário, o parâmetro deverá ser definido como NULL.

[in, out, optional] pbIV

O endereço de um buffer que contém o IV (vetor de inicialização ) a ser usado durante a descriptografia. O parâmetro cbIV contém o tamanho desse buffer. Essa função modificará o conteúdo desse buffer. Se você precisar reutilizar o IV mais tarde, certifique-se de fazer uma cópia desse buffer antes de chamar essa função.

Esse parâmetro é opcional e pode ser NULL se nenhum IV for usado.

O tamanho necessário do IV pode ser obtido chamando a função BCryptGetProperty para obter a propriedade BCRYPT_BLOCK_LENGTH . Isso fornecerá o tamanho de um bloco para o algoritmo, que também é o tamanho do IV.

[in] cbIV

O tamanho, em bytes, do buffer pbIV .

[out, optional] pbOutput

O endereço de um buffer para receber o texto não criptografado produzido por essa função. O parâmetro cbOutput contém o tamanho desse buffer. Para obter mais informações, consulte Comentários.

Se esse parâmetro for NULL, a função BCryptDecrypt calculará o tamanho necessário para o texto não criptografado dos dados criptografados passados no parâmetro pbInput . Nesse caso, o local apontado pelo parâmetro pcbResult contém esse tamanho e a função retorna STATUS_SUCCESS.

Se os valores dos parâmetros pbOutput e pbInput forem NULL, um erro será retornado, a menos que um algoritmo de criptografia autenticado esteja em uso. No último caso, a chamada é tratada como uma chamada de criptografia autenticada com dados de comprimento zero e a marca de autenticação, passada no parâmetro pPaddingInfo , é verificada.

[in] cbOutput

O tamanho, em bytes, do buffer pbOutput . Esse parâmetro será ignorado se o parâmetro pbOutput for NULL.

[out] pcbResult

Um ponteiro para uma variável ULONG para receber o número de bytes copiados para o buffer pbOutput . Se pbOutput for NULL, isso receberá o tamanho, em bytes, necessário para o texto não criptografado.

[in] dwFlags

Um conjunto de sinalizadores que modificam o comportamento dessa função. O conjunto permitido de sinalizadores depende do tipo de chave especificado pelo parâmetro hKey .

Se a chave for uma chave simétrica, ela poderá ser zero ou o valor a seguir.

Valor Significado
BCRYPT_BLOCK_PADDING
Os dados foram preenchidos no próximo tamanho do bloco quando foram criptografados. Se esse sinalizador tiver sido usado com a função BCryptEncrypt , ele também deverá ser especificado nessa função. Esse sinalizador não deve ser usado com os modos de criptografia autenticados (AES-CCM e AES-GCM).
 

Se a chave for uma chave assimétrica, esse poderá ser um dos valores a seguir.

Valor Significado
BCRYPT_PAD_NONE
Não use nenhum preenchimento. O parâmetro pPaddingInfo não é usado. O parâmetro cbInput deve ser um múltiplo do tamanho do bloco do algoritmo.

O tamanho do bloco pode ser obtido chamando a função BCryptGetProperty para obter a propriedade BCRYPT_BLOCK_LENGTH da chave. Isso fornecerá o tamanho de um bloco para o algoritmo.

BCRYPT_PAD_OAEP
O esquema OAEP (Preenchimento de Criptografia Assimétrica Ideal) foi usado quando os dados foram criptografados. O parâmetro pPaddingInfo é um ponteiro para uma estrutura BCRYPT_OAEP_PADDING_INFO .
BCRYPT_PAD_PKCS1
Os dados foram preenchidos com um número aleatório quando os dados foram criptografados. O parâmetro pPaddingInfo não é usado.

Valor retornado

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_AUTH_TAG_MISMATCH
A marca de autenticação computada não correspondeu ao valor fornecido no parâmetro pPaddingInfo .
STATUS_BUFFER_TOO_SMALL
O tamanho especificado pelo parâmetro cbOutput não é grande o suficiente para conter o texto cifrado.
STATUS_INVALID_BUFFER_SIZE
O parâmetro cbInput não é um múltiplo do tamanho do bloco do algoritmo e o sinalizador BCRYPT_BLOCK_PADDING não foi especificado no parâmetro dwFlags .
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 algoritmo não dá suporte à descriptografia.

Comentários

Os parâmetros pbInput e pbOutput podem ser iguais. Nesse caso, essa função executará a descriptografia em vigor. Se pbInput e pbOutput não forem iguais, os dois buffers poderão não se sobrepor.

Dependendo de quais modos de processador um provedor dá suporte, BCryptDecrypt 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 quaisquer ponteiros passados para a função BCryptDecrypt 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

   
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

BCryptEncrypt