Compartilhar via


Função CryptDecryptMessage (wincrypt.h)

A função CryptDecryptMessagedecodifica e descriptografa uma mensagem.

Sintaxe

BOOL CryptDecryptMessage(
  [in]                PCRYPT_DECRYPT_MESSAGE_PARA pDecryptPara,
  [in]                const BYTE                  *pbEncryptedBlob,
  [in]                DWORD                       cbEncryptedBlob,
  [out, optional]     BYTE                        *pbDecrypted,
  [in, out, optional] DWORD                       *pcbDecrypted,
  [out, optional]     PCCERT_CONTEXT              *ppXchgCert
);

Parâmetros

[in] pDecryptPara

Um ponteiro para uma estrutura CRYPT_DECRYPT_MESSAGE_PARA que contém parâmetros de descriptografia.

[in] pbEncryptedBlob

Um ponteiro para um buffer que contém a mensagem codificada e criptografada a ser descriptografada.

[in] cbEncryptedBlob

O tamanho, em bytes, da mensagem codificada e criptografada.

[out, optional] pbDecrypted

Um ponteiro para um buffer que recebe a mensagem descriptografada.

Para definir o tamanho dessas informações para fins de alocação de memória, esse parâmetro pode ser NULL. Uma mensagem descriptografada não será retornada se esse parâmetro for NULL. Para obter mais informações, consulte Recuperando dados de comprimento desconhecido.

[in, out, optional] pcbDecrypted

Um ponteiro para um DWORD que especifica o tamanho, em bytes, do buffer apontado pelo parâmetro pbDecrypted . Quando a função retorna, essa variável contém o tamanho, em bytes, da mensagem descriptografada copiada para pbDecrypted.

Nota Ao processar os dados retornados no buffer pbDecrypted , os aplicativos devem usar o tamanho real dos dados retornados. O tamanho real pode ser ligeiramente menor do que o tamanho do buffer especificado em pcbDecrypted na entrada. Na entrada, os tamanhos de buffer geralmente são especificados grandes o suficiente para garantir que os maiores dados de saída possíveis se encaixem no buffer. Na saída, o DWORD é atualizado para o tamanho real dos dados copiados para o buffer.
 

[out, optional] ppXchgCert

Um ponteiro para uma estrutura CERT_CONTEXT de um certificado que corresponde à chave de troca privada necessária para descriptografar a mensagem. Para indicar que a função não deve retornar o contexto de certificado usado para descriptografar, defina esse parâmetro como NULL.

Valor retornado

Se a função for bem-sucedida, a função retornará diferente de zero (TRUE).

Se a função falhar, ela retornará zero (FALSE). Para obter informações de erro estendidas, chame GetLastError.

Nota Erros de chamadas para CryptImportKey e CryptDecrypt podem ser propagados para essa função.
 
A função GetLastError retorna os seguintes códigos de erro com mais frequência.
Código de retorno Descrição
ERROR_MORE_DATA
Se o buffer especificado pelo parâmetro pbDecrypted não for grande o suficiente para manter os dados retornados, a função definirá o código ERROR_MORE_DATA e armazenará o tamanho do buffer necessário, em bytes, na variável apontada por pcbDecrypted.
E_INVALIDARG
Tipos inválidos de codificação de mensagens e certificados. Atualmente, há suporte apenas para PKCS_7_ASN_ENCODING e X509_ASN_ENCODING_TYPE. CbSize inválido em *pDecryptPara.
CRYPT_E_UNEXPECTED_MSG_TYPE
Não é uma mensagem criptográfica enveloped .
NTE_BAD_ALGID
A mensagem foi criptografada usando um algoritmo desconhecido ou sem suporte.
CRYPT_E_NO_DECRYPT_CERT
Nenhum certificado foi encontrado com uma propriedade de chave privada a ser usada para descriptografação.
 

Se a função falhar, GetLastError poderá retornar um erro de codificação/decodificação de ASN.1 (Abstract Syntax Notation One ). Para obter informações sobre esses erros, consulte Codificação/Decodificação de Valores Retornados do ASN.1.

Comentários

Quando NULL é passado para pbDecrypted e pcbDecrypted não é NULL, NULL é retornado para o endereço passado em ppXchgCert; caso contrário, um ponteiro para um CERT_CONTEXT será retornado. Para uma mensagem descriptografada com êxito, esse ponteiro para um CERT_CONTEXT aponta para o contexto de certificado usado para descriptografar a mensagem. Ele deve ser liberado chamando CertFreeCertificateContext. Se a função falhar, o valor em ppXchgCert será definido como NULL.

Exemplos

Para obter um exemplo que usa essa função, consulte Exemplo de programa C: usando CryptEncryptMessage e CryptDecryptMessage.

Requisitos

   
Cliente mínimo com suporte Windows XP [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2003 [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho wincrypt.h
Biblioteca Crypt32.lib
DLL Crypt32.dll

Confira também

CryptDecryptAndVerifyMessageSignature

Funções de mensagem simplificadas