Compartir a través de


Procedimiento para codificar y descodificar mensajes

El procedimiento para codificar un mensaje general es el siguiente.

Para codificar un mensaje

  1. Inicialice las estructuras de datos adecuadas para el tipo de datos deseado.
  2. Llame a CryptMsgOpenToEncode y pase los argumentos necesarios. Al llamar a CryptMsgOpenToEncode, si los datos que se van a proporcionar a CryptMsgUpdate ya se han codificado con mensajes, pase el identificador de objeto adecuado en pszInnerContentObjID (por ejemplo, "1.2.840.113549.1.7.2" para szOID_RSA_signedData). Si pszInnerContentObjID es NULL, se supone que el tipo de contenido interno no se ha codificado previamente y se procesa correctamente.
  3. Llame a CryptMsgUpdate tantas veces como sea necesario para completar el mensaje. En la última llamada, establezca el parámetro fFinal en TRUE. (Para más información, consulte CryptMsgUpdate).
  4. Llame a CryptMsgGetParam para obtener un puntero a los parámetros deseados, como el contenido. Para codificar datos simples y generales, use CMSG_CONTENT_PARAM para dwParamtype.
  5. Cierre el mensaje llamando a CryptMsgClose.

Este procedimiento da como resultado un mensaje codificado de un tipo especificado en las llamadas de función.

El procedimiento para descodificar un mensaje general es el siguiente.

Para descodificar un mensaje

  1. Determine la longitud necesaria para que el búfer contenga los datos codificados mediante CryptMsgCalculateEncodedLength.
  2. Llame a CryptMsgOpenToDecode y pase los argumentos necesarios. Para mantener la compatibilidad con Internet Explorer versión 3.0, se proporciona el parámetro dwMsgType . Los datos firmados creados en Internet Explorer 3.0 no contienen información de encabezado. Por lo tanto, si este mensaje se extrae de firmas de archivo, el tipo de mensaje debe pasarse a la función . Si cero se pasa al parámetro dwMsgType , la función leerá el tipo de mensaje del encabezado del mensaje. Si falta el encabezado, se producirá un error en la llamada de función. Si se ejecuta correctamente, se devuelve un identificador para el mensaje abierto.
  3. Llame a CryptMsgUpdate una vez. Esto hace que se realicen las acciones adecuadas en el mensaje, en función del tipo de mensaje.
  4. Para un procesamiento adicional del mensaje, como el descifrado adicional o la comprobación de firma, llame a CryptMsgControl y pase la acción deseada en dwCtrlType.
  5. Llame a CryptMsgGetParam para obtener un puntero a los parámetros deseados, como el contenido. Para descodificar datos generales simples, use CMSG_CONTENT_PARAM para el parámetro dwParamtype .
  6. Llame a CryptMsgClose para cerrar el mensaje.

Para obtener un ejemplo que implemente estos pasos, vea Ejemplo de programa C: codificación y descodificación de datos. Para conocer los procedimientos y un ejemplo que muestra el proceso de codificación, descodificación y comprobación de la firma de un mensaje firmado, vea Programa C de ejemplo: Firma, Codificación, Descodificación y Comprobación de un mensaje.