Función DecryptMessage (Negotiate)
La función DecryptMessage (Negotiate) descifra un mensaje. Algunos paquetes no cifran y descifran mensajes, sino que realizan y comprueban un hash de integridad.
Nota:
Se puede llamar a EncryptMessage (Negotiate) y DecryptMessage (Negotiate) al mismo tiempo desde dos subprocesos diferentes en un único contexto de interfaz del proveedor de compatibilidad de seguridad (SSPI) si un subproceso está cifrando y el otro está descifrado. Si se cifra más de un subproceso o se descifra más de un subproceso, cada subproceso debe obtener un contexto único.
Sintaxis
SECURITY_STATUS SEC_Entry DecryptMessage(
_In_ PCtxtHandle phContext,
_Inout_ PSecBufferDesc pMessage,
_In_ ULONG MessageSeqNo,
_Out_ PULONG pfQOP
);
Parámetros
phContext [in]
Identificador del contexto de seguridad que se va a usar para descifrar el mensaje.
pMessage [in, out]
Puntero a una estructura SecBufferDesc . En la entrada, la estructura hace referencia a una o varias estructuras SecBuffer . Al menos uno de estos debe ser de tipo SECBUFFER_DATA. Ese búfer contiene el mensaje cifrado. El mensaje cifrado se descifra en su lugar, sobrescribiendo el contenido original de su búfer.
MessageSeqNo [in]
Número de secuencia esperado por la aplicación de transporte, si existe. Si la aplicación de transporte no mantiene números de secuencia, este parámetro debe establecerse en cero.
pfQOP [out]
Puntero a una variable de tipo ULONG que recibe marcas específicas del paquete que indican la calidad de la protección.
Este parámetro puede ser la marca siguiente.
Value | Significado |
---|---|
SECQOP_WRAP_NO_ENCRYPT |
El mensaje no se cifró, pero se generó un encabezado o finalizador. Nota: KERB_WRAP_NO_ENCRYPT tiene el mismo valor y el mismo significado. |
Valor devuelto
Si la función comprueba que el mensaje se recibió en la secuencia correcta, la función devuelve SEC_E_OK.
Si la función no puede descifrar el mensaje, devuelve uno de los siguientes códigos de error.
Código devuelto | Descripción |
---|---|
SEC_E_INCOMPLETE_MESSAGE | Los datos del búfer de entrada están incompletos. La aplicación necesita leer más datos del servidor y llamar de nuevo a DecryptMessage (Negotiate). |
SEC_E_OUT_OF_SEQUENCE | El mensaje no se recibió en la secuencia correcta. |
Observaciones
A veces, una aplicación leerá datos de la entidad remota, intentará descifrarlos mediante DecryptMessage (Negotiate) y detectará que DecryptMessage (Negotiate) se realizó correctamente, pero los búferes de salida están vacíos. Este es un comportamiento normal y las aplicaciones deben ser capaces de tratar con él.
Windows XP: Esta función también se conocía como UnsealMessage. Las aplicaciones ahora solo deben usar DecryptMessage (Negotiate).
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows XP [solo aplicaciones de escritorio] |
Servidor mínimo compatible | Windows Server 2003 [solo aplicaciones de escritorio] |
Encabezado | Sspi.h (include Security.h) |
Biblioteca | Secur32.lib |
Archivo DLL | Secur32.dll |