Partilhar via


Função DecryptMessage (Digest)

A função DecryptMessage (Digest) desencripta uma mensagem. Alguns pacotes não criptografam e descriptografam mensagens, mas executam e verificam um hash de integridade.

O SSP (provedor de suporte de segurança ) Digest fornece criptografia e confidencialidade de descriptografia para mensagens trocadas entre cliente e servidor apenas como um mecanismo SASL.

Observação

EncryptMessage (Digest) e DecryptMessage (Digest) podem ser chamados ao mesmo tempo a partir de dois threads diferentes em um único contexto SSPI ( security support provider interface ) se um thread estiver criptografando e o outro estiver descriptografando. Se mais de um thread estiver criptografando ou mais de um thread estiver descriptografando, cada thread deverá obter um contexto exclusivo.

Sintaxe

SECURITY_STATUS SEC_ENTRY DecryptMessage(
  PCtxtHandle    phContext,
  PSecBufferDesc pMessage,
  unsigned long  MessageSeqNo,
  unsigned long  *pfQOP
);

Parâmetros

phContext [em]

Um identificador para o contexto de segurança a ser usado para descriptografar a mensagem.

pMessage [entrada, saída]

Um ponteiro para uma estrutura SecBufferDesc . Na entrada, a estrutura faz referência a uma ou mais estruturas SecBuffer . Pelo menos um deles deve ser do tipo SECBUFFER_DATA. Esse buffer contém a mensagem criptografada. A mensagem encriptada é desencriptada no local, substituindo o conteúdo original da sua memória intermédia.

Ao usar o SSP Digest, na entrada, a estrutura faz referência a uma ou mais estruturas SecBuffer . Um deles deve ser do tipo SECBUFFER_DATA ou SECBUFFER_STREAM e deve conter a mensagem criptografada.

MessageSeqNo [em]

O número de sequência esperado pelo aplicativo de transporte, se houver. Se o aplicativo de transporte não mantiver números de sequência, esse parâmetro deverá ser definido como zero.

Ao usar o SSP Digest, esse parâmetro deve ser definido como zero. O SSP Digest gerencia a numeração de sequência internamente.

pfQOP [saída]

Um ponteiro para uma variável do tipo ULONG que recebe sinalizadores específicos do pacote que indicam a qualidade da proteção.

Este parâmetro pode ser um dos seguintes sinalizadores.

Valor Significado
SECQOP_WRAP_NO_ENCRYPT
A mensagem não foi criptografada, mas um cabeçalho ou trailer foi produzido.
Observação: KERB_WRAP_NO_ENCRYPT tem o mesmo valor e o mesmo significado.
SIGN_ONLY
Ao usar o SSP Digest, use esse sinalizador quando o contexto de segurança estiver definido para verificar apenas a assinatura . Para obter mais informações, consulte Qualidade da proteção.

Valor de retorno

Se a função verificar se a mensagem foi recebida na sequência correta, a função retornará SEC_E_OK.

Se a função não conseguir desencriptar a mensagem, devolve um dos seguintes códigos de erro.

Código de retorno Descrição
SEC_E_BUFFER_TOO_SMALL O buffer de mensagens é muito pequeno. Usado com o SSP Digest.
SEC_E_CRYPTO_SYSTEM_INVALID A cifra escolhida para o contexto de segurança não é suportada. Usado com o SSP Digest.
SEC_E_INCOMPLETE_MESSAGE Os dados no buffer de entrada estão incompletos. O aplicativo precisa ler mais dados do servidor e chamar DecryptMessage (Digest) novamente.
SEC_E_INVALID_HANDLE Um identificador de contexto que não é válido foi especificado no parâmetro phContext . Usado com o SSP Digest.
SEC_E_MESSAGE_ALTERED A mensagem foi alterada. Usado com o SSP Digest.
SEC_E_OUT_OF_SEQUENCE A mensagem não foi recebida na sequência correta.
SEC_E_QOP_NOT_SUPPORTED Nem a confidencialidade nem a integridade são suportadas pelo contexto de segurança. Usado com o SSP Digest.

Observações

Às vezes, um aplicativo lê dados da parte remota, tenta descriptografá-los usando DecryptMessage (Digest) e descobre que DecryptMessage (Digest) foi bem-sucedido, mas os buffers de saída estão vazios. Este é um comportamento normal, e os aplicativos devem ser capazes de lidar com isso.

Windows XP: Esta função também era conhecida como UnsealMessage. As aplicações devem agora usar apenas DecryptMessage (Digest ).

Requerimentos

Requisito Valor
Cliente mínimo suportado Windows XP [apenas aplicações de ambiente de trabalho]
Servidor mínimo suportado Windows Server 2003 [apenas aplicações de ambiente de trabalho]
Cabeçalho Sspi.h (inclui Security.h)
Biblioteca Secur32.lib
DLL Secur32.dll

Ver também