Función CryptDecryptMessage (wincrypt.h)

La función CryptDecryptMessagedescodifica y descifra un mensaje.

Sintaxis

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

Puntero a una estructura de CRYPT_DECRYPT_MESSAGE_PARA que contiene parámetros de descifrado.

[in] pbEncryptedBlob

Puntero a un búfer que contiene el mensaje codificado y cifrado que se va a descifrar.

[in] cbEncryptedBlob

Tamaño, en bytes, del mensaje codificado y cifrado.

[out, optional] pbDecrypted

Puntero a un búfer que recibe el mensaje descifrado.

Para establecer el tamaño de esta información con fines de asignación de memoria, este parámetro puede ser NULL. No se devolverá un mensaje descifrado si este parámetro es NULL. Para obtener más información, vea Recuperar datos de longitud desconocida.

[in, out, optional] pcbDecrypted

Puntero a un DWORD que especifica el tamaño, en bytes, del búfer al que apunta el parámetro pbDecrypted . Cuando la función devuelve, esta variable contiene el tamaño, en bytes, del mensaje descifrado copiado en pbDecrypted.

Nota Al procesar los datos devueltos en el búfer pbDecrypted , las aplicaciones deben usar el tamaño real de los datos devueltos. El tamaño real puede ser ligeramente menor que el tamaño del búfer especificado en pcbDecrypted en la entrada. En la entrada, los tamaños del búfer suelen especificarse lo suficientemente grandes como para asegurarse de que los datos de salida más grandes caben en el búfer. En la salida, DWORD se actualiza al tamaño real de los datos copiados en el búfer.
 

[out, optional] ppXchgCert

Puntero a una estructura CERT_CONTEXT de un certificado que corresponde a la clave de intercambio privada necesaria para descifrar el mensaje. Para indicar que la función no debe devolver el contexto de certificado usado para descifrar, establezca este parámetro en NULL.

Valor devuelto

Si la función se ejecuta correctamente, la función devuelve un valor distinto de cero (TRUE).

Si se produce un error en la función, devuelve cero (FALSE). Para obtener información de error extendida, llame a GetLastError.

Nota Es posible que los errores de las llamadas a CryptImportKey y CryptDecrypt se propaguen a esta función.
 
La función GetLastError devuelve los siguientes códigos de error con más frecuencia.
Código devuelto Descripción
ERROR_MORE_DATA
Si el búfer especificado por el parámetro pbDecrypted no es lo suficientemente grande como para contener los datos devueltos, la función establece el código de ERROR_MORE_DATA y almacena el tamaño de búfer necesario, en bytes, en la variable a la que apunta pcbDecrypted.
E_INVALIDARG
Tipos de codificación de certificados y mensajes no válidos. Actualmente solo se admiten PKCS_7_ASN_ENCODING y X509_ASN_ENCODING_TYPE. CbSize no válido en *pDecryptPara.
CRYPT_E_UNEXPECTED_MSG_TYPE
No es un mensaje criptográfico sobre .
NTE_BAD_ALGID
El mensaje se cifró mediante un algoritmo desconocido o no admitido.
CRYPT_E_NO_DECRYPT_CERT
No se encontró ningún certificado con una propiedad de clave privada que se va a usar para descifrar.
 

Si se produce un error en la función, GetLastError puede devolver un error de codificación y descodificación de sintaxis abstracta Uno (ASN.1). Para obtener información sobre estos errores, vea Valores devueltos de codificación/descodificación de ASN.1.

Comentarios

Cuando se pasa NULL para pbDecrypted y pcbDecrypted no es NULL, se devuelve NULL para la dirección pasada en ppXchgCert; de lo contrario, se devuelve un puntero a un CERT_CONTEXT . Para un mensaje descifrado correctamente, este puntero a un CERT_CONTEXT apunta al contexto de certificado usado para descifrar el mensaje. Debe liberarse llamando a CertFreeCertificateContext. Si se produce un error en la función, el valor de ppXchgCert se establece en NULL.

Ejemplos

Para ver un ejemplo que usa esta función, vea Ejemplo de programa C: Uso de CryptEncryptMessage y CryptDecryptMessage.

Requisitos

   
Cliente mínimo compatible Windows XP [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2003 [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado wincrypt.h
Library Crypt32.lib
Archivo DLL Crypt32.dll

Consulte también

CryptDecryptAndVerifyMessageSignature

Funciones de mensaje simplificadas