Descodificación de datos sobres

Las tareas generales necesarias para descodificar un mensaje sobre se muestran en la ilustración siguiente y se describen en la lista siguiente.

descodificación de datos sobres

La secuencia de eventos para descodificar datos sobres mediante la administración de claves de transporte de claves, como se muestra en la ilustración anterior, es la siguiente:

  • Se recupera un puntero al mensaje sobre digitalmente .
  • Se abre un almacén de certificados .
  • En el mensaje, se recupera el identificador de destinatario (Mi id. ).
  • El identificador del destinatario se usa para recuperar el certificado.
  • Se recupera la clave privada asociada a ese certificado.
  • La clave privada se usa para descifrar la clave simétrica (sesión).
  • El algoritmo de cifrado se recupera del mensaje.
  • Con la clave privada y el algoritmo de cifrado, los datos se descifran.

En el procedimiento siguiente se usan funciones de mensaje de bajo nivel para realizar las tareas que se acaban de enumerar.

Para descodificar un mensaje sobre

  1. Obtenga un puntero al BLOB codificado.
  2. Llame a CryptMsgOpenToDecode y pase los argumentos necesarios.
  3. Llame a CryptMsgUpdate una vez, pasando el identificador recuperado en el paso 2 y un puntero a los datos que se van a descodificar. Esto hace que se realicen las acciones adecuadas en el mensaje, según el tipo de mensaje.
  4. Llame a CryptMsgGetParam, pasando el identificador recuperado en el paso 2 y CMSG_TYPE_PARAM para comprobar que el mensaje es del tipo de datos sobres.
  5. Llame de nuevo a CryptMsgGetParam y pase CMSG_INNER_CONTENT_TYPE_PARAM para obtener el tipo de datos del contenido interno.
  6. Si el tipo de datos de contenido interno es datos, descifre y descodifique el contenido. De lo contrario, ejecute un procedimiento de descodificación adecuado para el tipo de datos de contenido.
  7. Suponiendo que el tipo de contenido interno es "data", inicialice la estructura de datos CMSG_CTRL_DECRYPT_PARA y llame a CryptMsgControl, pasando CMSG_CTRL_DECRYPT y la dirección de la estructura. El contenido se descifrará.
  8. Llame a CryptMsgGetParam, pasando CMSG_CONTENT_PARAM para obtener un puntero a los datos de contenido descodificados BLOB (cadena BYTE ).
  9. Llame a CryptMsgClose para cerrar el mensaje.

El resultado de este procedimiento es que el mensaje se descodifica y descifra y se recupera un puntero al blob de datos de contenido.

Programa C de ejemplo: Codificación de un mensaje sobre y firmado