Função DecryptMessage (Geral)
A função DecryptMessage (Geral) descriptografa uma mensagem. Alguns pacotes não criptografam e descriptografam mensagens, mas executam e marcar um hash de integridade.
O SSP ( provedor de suporte de segurança ) Digest fornece confidencialidade de criptografia e descriptografia para mensagens trocadas entre o cliente e o servidor apenas como um mecanismo SASL.
Essa função também é usada com o SSP do Schannel para sinalizar uma solicitação de um remetente de mensagem para uma renegociação (refazer) dos atributos de conexão ou para um desligamento da conexão.
Observação
EncryptMessage (Geral) e DecryptMessage (Geral) podem ser chamados ao mesmo tempo de dois threads diferentes em um contexto de SSPI ( interface de provedor de suporte de segurança ) 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.
Para obter informações sobre como usar essa função com um SSP específico, consulte os tópicos a seguir.
Tópico | Descrição |
---|---|
DecryptMessage (Digest) | Descriptografa uma mensagem usando Digest. |
DecryptMessage (Kerberos) | Descriptografa uma mensagem usando Kerberos. |
DecryptMessage (Negotiate) | Descriptografa uma mensagem usando Negotiate. |
DecryptMessage (NTLM) | Descriptografa uma mensagem usando NTLM. |
DecryptMessage (Schannel) | Descriptografa uma mensagem usando schannel. |
Sintaxe
SECURITY_STATUS SEC_Entry DecryptMessage(
_In_ PCtxtHandle phContext,
_Inout_ PSecBufferDesc pMessage,
_In_ ULONG MessageSeqNo,
_Out_ PULONG pfQOP
);
Parâmetros
-
phContext [in]
-
Um identificador para o contexto de segurança a ser usado para descriptografar a mensagem.
-
pMessage [in, out]
-
Um ponteiro para uma estrutura SecBufferDesc . Na entrada, a estrutura faz referência a uma ou mais estruturas SecBuffer . Um deles pode ser do tipo SECBUFFER_DATA. Esse buffer contém a mensagem criptografada. A mensagem criptografada é descriptografada no local, substituindo o conteúdo original de seu buffer.
Ao usar o Digest SSP, 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.
Ao usar o SSP do Schannel com contextos que não são orientados à conexão, na entrada, a estrutura deve conter quatro estruturas SecBuffer . Exatamente um buffer deve ser do tipo SECBUFFER_DATA e conter uma mensagem criptografada, que é descriptografada no local. Os buffers restantes são usados para saída e devem ser do tipo SECBUFFER_EMPTY. Para contextos orientados à conexão, um buffer de tipo SECBUFFER_DATA deve ser fornecido, conforme observado para contextos não orientados para conexão. Além disso, um segundo buffer de tipo SECBUFFER_TOKEN que contém um token de segurança também deve ser fornecido.
-
MessageSeqNo [in]
-
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 Digest SSP, esse parâmetro deve ser definido como zero. O Digest SSP gerencia a numeração de sequência internamente.
Ao usar o SSP do Schannel, esse parâmetro deve ser definido como zero. O SSP do Schannel não usa números de sequência.
-
pfQOP [out]
-
Um ponteiro para uma variável do tipo ULONG que recebe sinalizadores específicos do pacote que indicam a qualidade da proteção.
Ao usar o SSP do Schannel, esse parâmetro não é usado e deve ser definido como NULL.
Esse parâmetro pode ser um dos sinalizadores a seguir.
Valor Significado SECQOP_WRAP_NO_ENCRYPT A mensagem não foi criptografada, mas um cabeçalho ou trailer foi produzido.
Nota: KERB_WRAP_NO_ENCRYPT tem o mesmo valor e o mesmo significado.- SIGN_ONLY
Ao usar o Digest SSP, use esse sinalizador quando o contexto de segurança estiver definido para verificar apenas a assinatura . Para obter mais informações, consulte Qualidade de proteção.
Valor retornado
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 descriptografar a mensagem, ela retornará um dos códigos de erro a seguir.
Código de retorno | Descrição |
---|---|
|
O buffer de mensagens é muito pequeno. Usado com o Digest SSP. |
|
Não há suporte para a codificação escolhida para o contexto de segurança . Usado com o Digest SSP. |
|
Os dados no buffer de entrada estão incompletos. O aplicativo precisa ler mais dados do servidor e chamar DecryptMessage (Geral) novamente. |
|
Um identificador de contexto que não é válido foi especificado no parâmetro phContext . Usado com os SSPs Digest e Schannel. |
|
Os buffers são do tipo errado ou nenhum buffer do tipo SECBUFFER_DATA foi encontrado. Usado com o SSP do Schannel. |
|
A mensagem foi alterada. Usado com os SSPs Digest e Schannel. |
|
A mensagem não foi recebida na sequência correta. |
|
Não há suporte para confidencialidade nem integridade no contexto de segurança. Usado com o Digest SSP. |
|
O remetente da mensagem terminou de usar a conexão e iniciou um desligamento. Para obter informações sobre como iniciar ou reconhecer um desligamento, consulte Desligando uma conexão Schannel. Usado com o SSP do Schannel. |
|
A parte remota requer uma nova sequência de handshake ou o aplicativo acabou de iniciar um desligamento. Retorne ao loop de negociação e chame AcceptSecurityContext (Geral) ou InitializeSecurityContext (Geral), passando buffers de entrada vazios. Se a função retornar um buffer do tipo SEC_BUFFER_EXTRA, isso deverá ser passado para a função AcceptSecurityContext (Geral) como um buffer de entrada. Usado com o SSP do Schannel. Não há suporte para renegociação no modo kernel Schannel. O chamador deve ignorar esse valor retornado ou desligar a conexão. Se o valor for ignorado, o cliente ou o servidor poderão desligar a conexão como resultado. |
Comentários
Quando você usa o SSP do Schannel, a função DecryptMessage (Geral) retorna SEC_I_CONTEXT_EXPIRED quando o remetente da mensagem desliga a conexão. Para obter informações sobre como iniciar ou reconhecer um desligamento, consulte Desligando uma Conexão Schannel.
Quando você usa o SSP do Schannel, DecryptMessage (Geral) retorna SEC_I_RENEGOTIATE quando o remetente da mensagem deseja renegociar a conexão (contexto de segurança). Um aplicativo lida com uma renegociação solicitada chamando AcceptSecurityContext (Geral) ( lado do servidor) ou InitializeSecurityContext (geral) (lado do cliente) e passando buffers de entrada vazios. Depois que essa chamada inicial retornar um valor, prossiga como se seu aplicativo estivesse criando uma nova conexão. Para obter mais informações, consulte [Criando um contexto de segurança Schannel](creating-an-schannel-security-context.md).
Para obter informações sobre como interoperar com GSSAPI, consulte Interoperabilidade SSPI/Kerberos com GSSAPI.
Requisitos
Requisito | Valor |
---|---|
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] |
parâmetro |
|
Biblioteca |
|
DLL |
|
Confira também