Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
La función EncryptMessage (General) cifra un mensaje para proporcionar privacidad. EncryptMessage (General) permite a una aplicación elegir entre algoritmos criptográficos admitidos por el mecanismo elegido. La función EncryptMessage (General) usa el contexto de seguridad al que hace referencia el identificador de contexto. Algunos paquetes no tienen mensajes que se van a cifrar o descifrar, sino que proporcionan un hash de integridad que se puede comprobar.
Cuando se usa el proveedor de compatibilidad de seguridad implícita (SSP), esta función solo está disponible como un mecanismo SASL.
Al usar el SSP de Schannel, esta función cifra los mensajes mediante una clave de sesión negociada con la entidad remota que recibirá el mensaje. El algoritmo de cifrado viene determinado por [conjunto de cifrado](cifrado-suites-in-schannel.md) en uso.
Nota:
Se puede llamar a EncryptMessage (General) y DecryptMessage (General) al mismo tiempo desde dos subprocesos diferentes en un único contexto de interfaz de proveedor de compatibilidad de seguridad (SSPI) si un subproceso está cifrando y el otro se descifra. Si se cifra más de un subproceso o se descifra más de un subproceso, cada subproceso debe obtener un contexto único.
Para obtener información sobre el uso de esta función con un SSP específico, consulte los temas siguientes.
| Tema | Descripción |
|---|---|
| EncryptMessage (resumen) | Cifra un mensaje para proporcionar privacidad mediante digest. |
| EncryptMessage (Kerberos) | Cifra un mensaje para proporcionar privacidad mediante Kerberos. |
| EncryptMessage (Negotiate) | Cifra un mensaje para proporcionar privacidad mediante Negotiate. |
| EncryptMessage (NTLM) | Cifra un mensaje para proporcionar privacidad mediante NTLM. |
| EncryptMessage (Schannel) | Cifra un mensaje para proporcionar privacidad mediante Schannel. |
Sintaxis
SECURITY_STATUS SEC_Entry EncryptMessage(
_In_ PCtxtHandle phContext,
_In_ ULONG fQOP,
_Inout_ PSecBufferDesc pMessage,
_In_ ULONG MessageSeqNo
);
Parámetros
phContext [in]
Identificador del contexto de seguridad que se va a usar para cifrar el mensaje.
fQOP [in]
Marcas específicas del paquete que indican la calidad de la protección. Un paquete de seguridad puede usar este parámetro para habilitar la selección de algoritmos criptográficos.
Al usar el SSP de síntesis, este parámetro debe establecerse en cero.
Este parámetro puede ser una de las marcas siguientes.
| Valor | Significado |
|---|---|
|
SECQOP_WRAP_NO_ENCRYPT |
Genere un encabezado o finalizador, pero no cifre el mensaje. Nota: KERB_WRAP_NO_ENCRYPT tiene el mismo valor y el mismo significado. |
|
Envíe un mensaje de alerta de Schannel. En este caso, el parámetro pMessage debe contener un código de evento SSL/TLS estándar de dos bytes. Este valor solo es compatible con Schannel SSP. |
pMessage [in, out]
Puntero a una estructura SecBufferDesc . En la entrada, la estructura hace referencia a una o varias estructuras SecBuffer . Uno de estos puede ser de tipo SECBUFFER_DATA. Ese búfer contiene el mensaje que se va a cifrar. El mensaje se cifra en contexto y sobrescribe el contenido original de la estructura.
La función no procesa los búferes con el atributo SECBUFFER_READONLY.
La longitud de la estructura SecBuffer que contiene el mensaje no debe ser mayor que cbMaximumMessage, que se obtiene de la función QueryContextAttributes (General) (SECPKG_ATTR_STREAM_SIZES).
Al usar el SSP de resumen, debe haber un segundo búfer de tipo SECBUFFER_PADDING o SEC_BUFFER_DATA para contener información de firma . Para obtener el tamaño del búfer de salida, llame a la función QueryContextAttributes (General) y especifique SECPKG_ATTR_SIZES. La función devolverá una estructura SecPkgContext_Sizes . El tamaño del búfer de salida es la suma de los valores de los miembros cbMaxSignature y cbBlockSize .
Las aplicaciones que no usan SSL deben proporcionar un secBuffer de tipo SECBUFFER_PADDING.
MessageSeqNo [in]
Número de secuencia asignado a la aplicación de transporte al mensaje. Si la aplicación de transporte no mantiene números de secuencia, este parámetro debe ser cero.
Al usar el SSP de síntesis, este parámetro debe establecerse en cero. El SSP de resumen administra la numeración de secuencia internamente.
Al usar SSP de Schannel, este parámetro debe establecerse en cero. Schannel SSP no usa números de secuencia.
Valor devuelto
Si la función se ejecuta correctamente, la función devuelve SEC_E_OK.
Si se produce un error en la función, devuelve uno de los siguientes códigos de error.
| Código de retorno | Descripción |
|---|---|
| SEC_E_BUFFER_TOO_SMALL | El búfer de salida es demasiado pequeño. Para obtener más información, vea Comentarios. |
| SEC_E_CONTEXT_EXPIRED | La aplicación hace referencia a un contexto que ya se ha cerrado. Una aplicación escrita correctamente no debe recibir este error. |
| SEC_E_CRYPTO_SYSTEM_INVALID | No se admite el cifrado elegido para el contexto de seguridad . |
| SEC_E_INSUFFICIENT_MEMORY | No hay suficiente memoria disponible para realizar la acción solicitada. |
| SEC_E_INVALID_HANDLE | Se especificó un identificador de contexto que no es válido en el parámetro phContext . |
| SEC_E_INVALID_TOKEN | No se encontró ningún búfer de tipo SECBUFFER_DATA. |
| SEC_E_QOP_NOT_SUPPORTED | Ni la confidencialidad ni la integridad son compatibles con el contexto de seguridad. |
Observaciones
La función EncryptMessage (General) cifra un mensaje en función del mensaje y la clave de sesión de un contexto de seguridad.
Si la aplicación de transporte creó el contexto de seguridad para admitir la detección de secuencias y el autor de la llamada proporciona un número de secuencia, la función incluye esta información con el mensaje cifrado. La inclusión de esta información protege contra la reproducción, inserción y supresión de mensajes. El paquete de seguridad incorpora el número de secuencia pasado desde la aplicación de transporte.
Cuando se usa el SSP de resumen, obtenga el tamaño del búfer de salida llamando a la función QueryContextAttributes (General) y especificando SECPKG_ATTR_SIZES. La función devolverá una estructura SecPkgContext_Sizes . El tamaño del búfer de salida es la suma de los valores de los miembros cbMaxSignature y cbBlockSize .
Cuando se usa con Schannel SSP, el parámetro pMessage debe contener una estructura SecBufferDesc con los siguientes búferes.
Nota:
Estos búferes deben proporcionarse en el orden mostrado.
| Tipo de búfer | Descripción |
|---|---|
| SECBUFFER_STREAM_HEADER | Utilizado de forma interna. No se requiere ninguna inicialización. |
| SECBUFFER_DATA | Contiene el mensaje de texto no cifrado que se va a cifrar. |
| SECBUFFER_STREAM_TRAILER | Utilizado de forma interna. No se requiere ninguna inicialización. |
| SECBUFFER_EMPTY | Utilizado de forma interna. No se requiere ninguna inicialización. El tamaño puede ser cero. |
Cuando se usa el SSP de Schannel, determine el tamaño máximo de cada uno de los búferes llamando a la función QueryContextAttributes (General) y especificando el atributo SECPKG_ATTR_STREAM_SIZES. Esta función devuelve una estructura de SecPkgContext_StreamSizes cuyos miembros contienen los tamaños máximos del encabezado (miembro cbHeader ), message (miembro cbMaximumMessage ) y búferes de finalizador (miembro cbTrailer ).
Para obtener un rendimiento óptimo, las estructuras pMessage deben asignarse a partir de la memoria contigua.
Windows XP/2000: Esta función también se conoce como SealMessage. Las aplicaciones ahora solo deben usar EncryptMessage (General).
Requisitos
| Requisito | Valor |
|---|---|
| Mínima versión de cliente admitida | Windows XP [solo aplicaciones de escritorio] |
| Servidor mínimo admitido | Windows Server 2003 [solo aplicaciones de escritorio] |
| Cabecera |
|
| Biblioteca |
|
| DLL |
|